はじめに
タイトルの通りで、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検索で探そうとするとなかなかヒットしなかったのでキーワードをちりばめながら備忘録程度に書いてみました。
ご参考になれば幸いです。