【发布时间】:2013-02-26 09:34:51
【问题描述】:
我有以下脚本,它使用 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
【问题讨论】:
-
你设置
IFS=' '有什么原因吗?默认值应该对您有用,因为它已经包含换行符。 -
我想我使用不同的代码从 awk 渲染到数组。但你是对的,它现在似乎工作了......叹息。我以为我的值之间有空格,所以我希望分隔符 100% 正确。