1

我有以下脚本,它使用 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

for...in我怎样才能让它返回 4 的长度。如果只有 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
4

1 回答 1

1

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

IFS=$'\n' # newline between quotes

array length = 4然后它会像您期望的那样回声。

于 2013-03-11T09:15:36.923 回答