2013-07-09 48 views
2

我一個文本文件,誰包含此:awk命令的結果到數組

Hello 4 
Bye 2 
Toto 2 

,我希望把每行到MyArray1的第一個字符串,和整數到另一個MyArray2。

我寫了這個,但它不起作用。

#!/bin/bash 

countline=$(awk '{ print $1 }' test | wc -l) 


for ((i=0; i<$countline ;i=i+1)) 

    do 

     MyArray1[$i]=awk '{ print $1 }' test 
done 


for ((i=0; i<$countline ;i=i+1)) 

    do 

     MyArray2[$i]=awk '{ print $2 }' test 
done 

請幫幫我。

+0

注意,這是更簡單,更快:'countline = $(WC -l

回答

2

保持簡單:

MyArray1=($(awk '{ print $1 }' test)) 
MyArray2=($(awk '{ print $2 }' test)) 

你並不需要遍歷環上awk的輸出,並如上圖所示可以直接創建數組。

+0

很棒,謝謝 –

+0

不客氣。 – anubhava

4

這將做到這一點:

while read -r f1 f2; do 
    ary1+=("$f1") 
    ary2+=("$f2") 
done < file 

$ printf "%s\n" "${ary1[@]}" 
Hello 
Bye 
Toto 

$ printf "%s\n" "${ary2[@]}" 
4 
2 
2 

或者你可以使用cut

arryone=($(cut -d ' ' -f1 file)) 
arrytwo=($(cut -d ' ' -f2 file)) 
+1

只要指出'bash'數組是多麼的奇怪,下面的工作也是:'while read -r ary1 [i] ary2 [i]; do((i ++));完成「(只要'i'爲0或不設置開始)。 – chepner

+0

Ahh @chepner現在很漂亮!謝謝,我不知道。 –

+1

對於只讀取一次文件的解決方案+1 ...並且不需要額外的外部進程... – twalberg