2014-09-18 36 views
0

如何從一個讀取行讀取多個變量?我試圖從這些多行變量中創建一個csv文件。如何在while循環中「讀取」多個變量

不知道這是否是最好的方式來做到這一點。

例如:

1st_list=$(..code..) 
2nd_list=$(..code..) 

while read line_from_1, line_from_2 
do 
    echo "$line_from_1,$line_from_2" >> outputfile.csv 

done < $1st_list,$2nd_list 
+0

什麼是'$ 1st_list'和'$ 2nd_list'中的樣本值? – anubhava 2014-09-18 16:02:51

+0

@anubhava $ 1st_list和$ 2nd_list是多行腳本變量。我試圖用這些變量創建一個csv文件。不知道這是否是這樣做的最佳方式。我會更新這個問題。 – hfranco 2014-09-18 16:06:15

+0

你有兩組線,你正試圖結合到底如何? '行1,line2'? 'line1field1,line2field1,l1f2,l2f2,......「? – 2014-09-18 16:07:53

回答

2

假設你想要的輸出

file1line1,file2line1 
file2line2,file2line2 
etc. 

那麼你不需要這樣的事,就好象paste正是這麼做的。

paste -d, <(echo "$first_list") <(echo "$second_list") 
3

你的問題有點不清楚,但爲了從多個平行的源來讀取,您需要使用多個文件描述符,並且我認爲,進程替換。

while read line_from_1; 
     read -u 3 line_from_2; do 
    echo "From first: $line_from_1" 
    echo "From second: $line_from_2" 
done < <(echo "$first_list") 3< <(echo "$second_list") 

(當然,你不必使用兩個變量,如果他們不已經存在,只是把用於填充在適當的進程替換哺養while循環的每個變量的代碼:

done < <(...code for first list...) 3< <(...code for second list...) 

書面,循環將只要讀成功(第一次讀的退出狀態被忽略)成功。只要雙方都成功就可以循環使用,請使用read line_from_1 && read -u 3 line_from_2

要循環只要要麼成功,你需要一個稍微複雜一點的迷你腳本作爲while條件:

while read line_from_1; read1=$?; 
     read line_from_2; read2=$?; 
     ((read1 == 0 || read2 == 0)); do 

更新:您也可以直接在這裏使用的字符串,如果變量已經設置替代進程替代。 (我不知道,如果3<<<是合法的。)

while read line_from_1; read -u 3 line_from_2; do 
    ... 
done <<< "$first_line" 3<<< "$second_line" 
+1

當$ first_list被清空時失敗。 – 2014-09-18 16:10:35

+2

是的;當一個或另一個清單首先耗盡時,有多種方法可以處理,而且OP在問題中沒有提到期望的行爲。 – chepner 2014-09-18 16:13:41

+2

當然,更好的做法是用實際產生它們的代碼替換'echo'$ first_list「'和'echo」$ second_list「';這種方式內容不需要存儲在內存中。 – 2014-09-18 16:16:11