1. ホーム
  2. linux

[解決済み] 列値条件でawkを使用する

2022-08-12 03:19:56

質問

私は awk を AWK プログラミング言語 でawkを学んでいるのですが、例のひとつに問題があります。

もし私が $2 がある値と等しい場合に $3 を表示したかったら、 (例えば 1 のように)、私はこのコマンドを使っていましたが、うまくいきました。

awk '$2==1 {print $3}' <infile> | more

しかし、1を他の検索条件で代用すると、(例えば findtext のように)、コマンドは動作しません。

awk '$1== findtext {print $3}' <infile> | more

これは何も出力を返しませんし、入力ファイルに'findtext'が存在することは確かです。

私もこれを試しましたが、うまくいきません。

awk '$1== "findtext" {print $3}' <infile> | more

これは'test'という名前の私のテストファイルで、スペースで区切られた9行と8つのフィールドから成っています。

1 11 0.959660297 0 0.021231423 -0.0073 -0.0031 MhZisp
2 14 0.180467091 0.800424628 0 0.0566 0.0103 ClNonZ
3 19 0.98089172 0 0 -0.0158 0.0124 MhNonZ
4 15 0.704883227 0.265392781 0.010615711 -0.0087 -0.0092 MhZisp
5 22 0.010615711 0.959660297 0.010615711 0.0476 0.0061 ClNonZ
6 23 0.715498938 0 0.265392781 -0.0013 -0.0309 Unkn
7 26 0.927813163 0 0.053078556 -0.0051 -0.0636 MhZisp
8 44 0.55626327 0.222929936 0.201698514 0.0053 -0.0438 MhZisp
9 31 0.492569002 0.350318471 0.138004246 0.0485 0.0088 ClNonZ

以下は、私がやったこととその出力です。

$awk '$8 == "ClNonZ" {print $3}' test 

$ grep ClNonZ test 
2 14 0.180467091 0.800424628 0 0.0566 0.0103 ClNonZ
5 22 0.010615711 0.959660297 0.010615711 0.0476 0.0061 ClNonZ
9 31 0.492569002 0.350318471 0.138004246 0.0485 0.0088 ClNonZ

8に"ClNonZ"が入っている$3は、これを期待しています。

0.180467091 
0.010615711 
0.492569002

なぜawkコマンドは何も返さなかったのかわかりません。何か思い当たることはありませんか?

どのように解決するのですか?

特定の文字列を探す場合は、引用符で囲んでください。

awk '$1 == "findtext" {print $3}'

そうでなければ、awk はこれを変数名と見なします。