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 に答える