(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Linux】awkコマンドを用いて指定列を特定のキーワードで検索する

スポンサーリンク

はじめに

タイトルの通りで、grepコマンドを用いると行全体で検索がかかってしまう、それを避けたい時に使うワンライナーです。

ワンライナー

cat ファイル名.csv | awk 'BEGIN{FS=","} $3 ~ /hoge/ {print $0}'

上の場合、csvファイル、つまり区切り文字が カンマ(,) なので field separator を "," としています。

Example

例えば以下のようなCSVファイルがあった場合に

$ cat hoge.csv
Name,Age,FatherName
Ken,20,Takeshi
Yumi,22,Hiroshi
Takeshi,21,Katsuya

単純にgrepにてTakeshiを検索すると

$ cat hoge.csv | grep Takeshi
Ken,20,Takeshi
Takeshi,21,Katsuya

複数行が出てきます。

ここでawkで狙い撃ちします。

$ cat hoge.csv | awk 'BEGIN{FS=","} $1 ~ /Takeshi/ {print $0}'
Takeshi,21,Katsuya
$ cat hoge.csv | awk 'BEGIN{FS=","} $3 ~ /Takeshi/ {print $0}'
Ken,20,Takeshi

完全一致にしたい場合は

上記の記法では部分一致でも引っかかってしまいます。

$3 ~ /Takeshi/

部分を

$3 == "Takeshi"

に変更すれば完全一致ではないと出力されません。

終わりに

本記法ですが、Google検索で探そうとするとなかなかヒットしなかったのでキーワードをちりばめながら備忘録程度に書いてみました。
ご参考になれば幸いです。