初めてのsedとawk
会社の若手勉強会でsedとawkを勉強した。なんだこれ!めっちゃ便利じゃん!
あとで見返す用にメモ。
sedとawkとは
文字列操作に特化したプログラミング言語。シェルから直接実行できて便利!プログラムをファイルとして外部定義することもOK。
文字列をマッチ → 操作 という書き方が共通している。エディタを開かなくても単純なファイル操作ができて嬉しい。
sed
文字列の置換に便利で、例えば空白区切のログをCSVファイルにするときに使ったりするそうだ。
コマンド
$ cat fishlist Maguro, Tuna Sake, Salmon Katsuo, Bonito $ sed 's/a/A/' fishlist MAguro, Tuna SAke, Salmon KAtsuo, Bonito
sはsubstitute(置換)の略!
便利な使い方
-fコマンドでファイルに定義したsedプログラムを実行できる
$ vi a2A s/a/A/g $ sed -f a2A fishlist MAguro, TunA SAke, SAlmon KAtsuo, Bonito
現場では、sedまで含めてシェルスクリプトにする → sed部分だけを外部ファイルにする、という使い方をしてる(発表者談)
パイプで処理を繋げられる
$ cat fishlist | sed 's/a/A/g' | sed 's/o/O/g' | sort KAtsuO, BOnitO MAgurO, TunA SAke, SAlmOn
こういう複数の変換をかますスクリプト書くときって逐次で結果を確認したいと思うんだけど、シェルだとそれが便利にできる!良い! でかいファイルの場合はheadをかませば良さそうだ。
$ head -2 fishlist | sed 's/a/A/g'| sed 's/o/O/g' | sort MAgurO, TunA SAke, SAlmOn
catがわり
$ sed '' fishlist Maguro, Tuna Sake, Salmon Katsuo, Bonito
これ役に立つ?笑
エディタを開かなくて良い
sedは入力ファイルを一行づつ処理するので、テキストエディタに全部を読み込む必要がない!素晴らしい!
でかいログの処理に便利そうだ。
awk
CSVのような構造化されたファイルの処理に強い。
ログを一部だけ出力したい時なんかに便利そうだ。
コマンド
マッチ部と操作の組み合わせを渡す。すごいのが、デフォルトで空白を文字列の区切りとして認識してくれること!
だから操作部で$1(マッチ行の一つ目の要素)みたいなことができるのだ。
$ awk '/u/ {print $1}' fishlist Maguro, Katsuo,
ちなみに$0で行全体。
$ awk '/u/ {print $0}' fishlist Maguro, Tuna Katsuo, Bonito
便利な使い方
-Fオブションで区切文字を変えられる。
$ awk -F ',' '/u/ {print $2}' fishlist Tuna Bonito
ログ編集で詰んだことがあったんで、現場で使えて便利だなーと思いました。