[英]bash CSV last column
我有這樣的格式的csv
John|Mayer
Bill|Potter
...
腳本是:
cat names.csv | while read line
do
name=$( echo $line | cut -d'|' -f1 ) # get the first name
surname=$( echo $line | cut -d'|' -f2 ) # get the surname
echo "$surname"
echo "Your name is: $name and surname is: $surname"
done
姓氏的回聲正在工作,我得到了名單(梅耶·波特...)。 但是當我在其他上下文中將其用作變量時,它不起作用(並且姓氏是:“ $ surname”)
這是因為在bash命令中,arround pipe |
在子流程中執行
所以done
后done
當前的shell環境與之前的命令相同
見:
declare -p BASHPID
declare -p BASHPID >&2 | declare -p BASHPID >&2
可以使用輸入重定向代替cat |
while read line
do
...
done < names.csv
也避免了產生兩個進程並創建管道
將我的評論轉換為答案。
您的循環中有幾個問題:
cat
和管道,因為它將分叉subshell IFS
可以在循環中不必要地使用cut
兩次 您可以使用以下循環:
while IFS='|' read -r fname lname; do
declare -p fname lname
# or do processing with $fname, $lname here
done < names.csv
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.