0

私はそのようなことをしたい:

for i in 1 2 3
do
   gawk '{if ($i==$2) {print $0;}}' filename
done

これは可能ですか?

ありがとう

4

4 に答える 4

1

gawk スクリプトを

{if ($1 == $2 ) ... }
{if ($2 == $2 ) ... }
{if ($3 == $2 ) ... }

できるよ:

私のために 1 2 3
行う
   gawk '{if ($'$i'==$2) {print $0;}}' ファイル名
終わり
于 2009-09-13T21:54:08.710 に答える
0

スクリプトの 2 つの可能な解釈が思い浮かびます。

  1. 2 番目のフィールドとして「1」、「2」、「3」の順に検索する必要があります。filename
  2. 実際には、1 番目のシェル スクリプト パラメータ、次に 2 番目のシェル スクリプト パラメータを検索する必要があります。

ループの両方のバージョンを次に示します。

for i in 1 2 3; do 
   gawk "{if (\"$i\"==\$2) {print \$0;}}" filename
done
for i in "$@"; do
   gawk "{if (\"$i\"==\$2) {print \$0;}}" filename
done
于 2009-09-13T21:55:29.757 に答える
0

確かにそれは可能ですが、おそらくあなたがやりたいことをしないでしょう。

……そういえば、どうたいの?あなたが書いたものからは本当に明確ではありません。おそらく変更しなければならないことの 1 つは、単一引用符を二重引用符に置き換えることです。これは、変数 ( など$i) が単一引用符で囲まれた文字列に置き換えられないためです。

于 2009-09-13T21:31:53.243 に答える