簡體   English   中英

bash CSV最后一欄

[英]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 | 在子流程中執行

所以donedone當前的shell環境與之前的命令相同

見:

declare -p BASHPID  
declare -p BASHPID  >&2 | declare -p BASHPID >&2

可以使用輸入重定向代替cat |

while read line
do
...
done < names.csv 

也避免了產生兩個進程並創建管道

將我的評論轉換為答案。

您的循環中有幾個問題:

  1. 不必要使用cat和管道,因為它將分叉subshel​​l
  2. 使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM