awk メモ

記述方法

$ awk 'pattern {action}' file

file を一行ずつ見て pattern にマッチした行に対して action を行う。pattern と action はともに省略できる。

変数

  • $1, $2, $3, ... : 行を区切り文字で区切ったときのフィールド。区切り文字はスペース。
  • NR : 現在処理している行の番号

# abc を含む行を出力
$ awk '/abc/'
# abc を含む行のはじめのフィールドだけを出力
$ awk '/abc/ {print $1}'
# 1行目と5行目を出力
$ awk 'NR==1 || NR==5'
# 区切り文字をタブにする
$ awk -F "\t" '/abc/ {print $1}'
# print では書式を書けないことに注意
$ awk '/abc/ {print "prefix_" $1,$2 "_suffix"}'
# ファイルサイズの合計を途中結果も含めて出力
$ ls -l | awk '{a+=$5; print a}'
# ファイルサイズの合計の計算結果のみを出力
$ ls -l | awk '{a+=$5} END {print a}'
# 置換は perl が簡単。他では正規表現の書き方が違ったりする。
$ awk '{gsub("1000g","1kg"); print}'
$ sed 's/1000g/1kg/g'
$ perl -pe 's/1000g/1kg/g;'

AKW の第一歩
AWK / QuickReference
日本語 perl texinfo
エディターを使用せずにテキスト内の文字を一括置換する。

これくらい覚えておけばコマンドラインから簡単に文字列処理が出来る。sedperlコマンドラインオプションを使えばイラネーか?