bash + awk:循环遍历返回大小为1的4个元素的数组?

时间:2013-03-11 09:07:55

标签: arrays bash loops awk

我有以下脚本使用awk匹配带有用户输入的字段

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的长度。如果只有1个元素,我不明白for...in是如何工作的?

编辑:

在创建数组之前,

echo $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
创建数组后

echo $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

1 个答案:

答案 0 :(得分:1)

这是因为awk的返回输出是换行符(\n),而不是以空格分隔。所以如果你有这样的IFS:

IFS=$'\n' # newline between quotes

然后它将按照您的预期回复array length = 4