0

シェル スクリプト内で、変数を awk に渡そうとしています。

私が持っていると言う

Y=113

ファイル (bigfile) を調べて、変数 Y が行で一致する場合は、いくつかの列を出力したいと思います。

私が使用する場合

awk  '{for(i=1;i<=NF;i++){if($i~/113/){print $1, $2, $3, $4}}}' < bigfile > x_113_list

望ましい結果が得られます

しかし、試してみると

Y=113
awk -v y="$Y" '{for(i=1;i<=NF;i++){if($i~/y/){print $1, $2, $3, $4}}}' < bigfile > x_"$Y"_list 

私は何も得ません。(コマンドラインで試してもそうです)何が間違っていますか?

4

2 に答える 2

5

の正規表現内では変数は置換されませんawk/y/常に 1 文字の一致を意味しyます。

index次のように関数を使用することもできます。if (index($i, y) != 0 ...

于 2013-10-17T00:03:41.757 に答える
4

y の前後にスラッシュをドロップするだけです。

{if($i~y){print $1, $2, $3, $4}}

~ /y/ は文字 y と一致し、 ~ y は変数 y と一致します。

于 2013-10-17T02:20:21.097 に答える