我有以下脚本使用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
答案 0 :(得分:1)
这是因为awk的返回输出是换行符(\n
),而不是以空格分隔。所以如果你有这样的IFS:
IFS=$'\n' # newline between quotes
然后它将按照您的预期回复array length = 4
。