2013-03-11 58 views
1

我有以下腳本,使用AWK如果我打印輸出,以配合用戶輸入bash + awk:循環返回大小爲1的4個元素的數組?

NB=$# 
FILE=myfile 

#GET INPUT 
if [ $NB -eq 1 ] 
then 
    A=`awk -F "\t" -v town="$1" 'tolower($3) ~ tolower(town) {print NR}' $FILE` 
fi 

領域,有這麼一句話:

7188 24369 77205 101441 

這是我所期待的。然後,如果我執行以下操作:

IFS=' ' 
array=($A) 
echo ${#array[@]} 

我實際上得到的長度爲1(?)。此外,如果我嘗試:

for x in $array 
do 
    echo $x 
done 

實際上,它打印出:

7188 
24369 
77205 
101441 

我怎麼能有它返回4.長度,我不明白是怎麼for...in作品如果只有1元?

編輯:

回聲$A | od -c之前創建陣列是:

0000000 7 1 8 8  2 4 3 6 9  7 7 2 0 5 
0000020  1 0 1 4 4 1 \n 
0000030 

回聲$A | od -c後創建陣列是:

0000000 7 1 8 8 \n 2 4 3 6 9 \n 7 7 2 0 5 
0000020 \n 1 0 1 4 4 1 \n 
0000030 
+0

是否有你設置IFS ='''的原因?默認值應該適用於您,因爲它已包含換行符。 – chepner 2013-03-11 12:56:53

+0

我想我使用不同的代碼從awk渲染到數組。但你是對的,現在似乎工作......感嘆。我認爲我的價值觀之間有空間,所以我想成爲100%的分隔符是正確的。 – 2013-03-11 15:05:29

回答

1

這是因爲從AWK返回的輸出是換行符(\n)以空格分隔而不是分隔符。所以,如果你有IFS喜歡這個:

IFS=$'\n' # newline between quotes 

然後,它會響應array length = 4因爲你期待。

+0

我編輯它,仍然回聲1.此外,如果長度仍然是1,循環如何打印4個元素?我也嘗試使用'tr'來形成我的數組(類似於'array =($(echo $ A | tr「」「\ n」))''),但沒有運氣。 – 2013-03-11 09:48:49

+0

首先,你需要運行一個循環來遍歷數組,像這樣:'for $ {array [@]}中的x''不像你寫的那樣。第二件事可以顯示'echo $ A |的輸出od -c'? – anubhava 2013-03-11 10:11:09

+0

當然!將輸出添加到問題本身(用於格式化)。 – 2013-03-11 10:18:56

相關問題