Linuxとコマンドラインの基礎
$ cat result.txt
cellA PASS 0.12
cellB FAIL 0.45
cellC PASS 0.08
cellD FAIL 0.31
$ awk '$2 == "FAIL" {print $1}' result.txt上の操作で、最後の awk が出力する内容として、正しいものはどれか。
- AcellB FAIL 0.45 と cellD FAIL 0.31 の2行
- BFAIL と FAIL の2行
- CcellB と cellD の2行
答えと解説を見る
正解:C. cellB と cellD の2行
awk は各行を空白で区切ってフィールドに分け、1番目を $1、2番目を $2 のように表し、行全体は $0 で表します。「$2 == "FAIL"」は2番目のフィールドが FAIL の行を選ぶ条件で、{print $1} はその行の1番目のフィールドを表示する動作です。条件に合うのは cellB と cellD の行なので、cellB と cellD が表示されます。awk は続いた空白をまとめて1つの区切りとみなすので、空白の数がそろっていない出力の列を取り出すときに cut より扱いやすいことがあります。
- A. {print $1} を書かないときの結果です。動作を省くと、条件に合った行全体($0)が表示されます。
- B. フィールドを0から数えたときの読み方です。awk の $1 は1番目のフィールドで、$0 は行全体を表します。
- C. 正しい。2番目のフィールドが FAIL の行の、1番目のフィールドが表示されます。