「awk」特定の文字列を含む行を出力する

awk でちょっと遊んでみたので、その時のメモ。

今回は特定の文字列を含む行を出力するってことをやってみました。

とりあえず、以下のようなファイルを用意します。

■ test1.txt

col1 col2 col3
hoge a b
uga c d
oro d e
hoge f g

※ ちなみにファイル内容を全て出力する場合、awk だと「awk '{print}' text1.txt」、「awk '{print $0}' text1.txt」( $0 は現在行全体を意味するみたい ) とかでできます。

上記ファイルで、例えば、col1 が "hoge" である行を出力する場合、以下のコマンドでいける ( まぁ、col1 をヘッダ的に扱うのは微妙ではありますが、何かしらのコマンド出力を操作する場合とか想定して・・・ )。

awk '/hoge/ {print}' test1.txt
awk '$1 == "hoge" {print}' test1.txt
awk '{if($1 ~ /hoge/) print}' test1.txt
awk '{if($1 == "hoge") print}' test1.txt

いろいろ、やり方ありますね。

上記できれば、あるコマンドの実行結果から特定の条件だけの行を抜き出すとかできそうですね。


あと、本題と関係ないけど、カンマ区切りのファイルの場合は オプションに「-F","」を指定してやればいいみたい。これで CSV ファイルとかにも対応できる。


使い始めたばっかりなので、簡単な内容ですが、以上です。
また、いろいろ遊んでみて書けるネタあれば書きたいと思います。


[ 参考 ]
・共通テーマ: 実例でわかる awk: 第 1 回
http://www.ibm.com/developerworks/jp/linux/library/l-awk1/