awk
awkコマンドは、指定したファイル内(または標準入力)の連続する同じ行を1行だけ表示するコマンドです。
以下のようなファイル(sam.txt)があるとします。

test1,aaa
test2,bbb
test3,ccc
test1,ddd
test1,eee
test1,bbb


awkコマンドを実行
では、このファイルに対してawkコマンドを実行します。

$ awk 'BEGIN { FS="," } { print $2 "=" $1}' sam.txt
aaa=test1
bbb=test2
ccc=test3
ddd=test1
eee=test1
bbb=test1
まず、BEGINは行ごとに処理される前に処理される内容を書きます。
FS=","はセパレータをカンマ(,)にするという意味です。
printは標準出力で、$1は第一フィールドの内容を格納しています。続けて$2,$3・・・と格納されます。
最後にawkコマンドは全体をシングルクォーテーション(')で囲みます。
最後にファイルを指定します。
printfで出力
awkコマンドではprintでなくprintfを使用して柔軟に出力することが出来ます。
printfはC言語のprintfと同じ書式です。
以下、例です。

$ awk 'BEGIN { FS=" " } { printf("%5s%8s\n",$2,$1) }' sam.txt
    test1,aaa
    test2,bbb
    test3,ccc
    test1,ddd
    test1,eee
    test1,bbb
正規表現にマッチする行を出力
awkコマンドでは、正規表現にマッチする行を出力することが可能です。
正規表現はスラッシュ(/)で囲みます。
行全体を出力したい場合は $0 が行全体を意味します。
もしくは単に print としても行全体を表示します。
以下のように実行します。

awk '/test1/ { print $0 }' sam.txt

awk '/test1/ { print }' sam.txt

結果は以下の通りです。

$ awk '/test1/ { print }' sam.txt
test1,aaa
test1,ddd
test1,eee
test1,bbb
行番号を付加
awkコマンドで出力する行に行番号を付加することができます。
行番号は NR であらわされます。
先頭に行番号を付加するには以下のように実行します。

$ awk ' {print NR " "$0}' sam.txt
1 test1,aaa
2 test2,bbb
3 test3,ccc
4 test1,ddd
5 test1,eee
6 test1,bbb

Back to top

Information