awk

文字列中のシングルクォートの表示

 awk "BEGIN { print \"That's it\" }"
   => That's it
 awk 'BEGIN { print "That\'s it" }'
   => 間違い

シェルのエスケープの性格上、ワンライナーでシングルクォートを表示する場合は上の例のようにする。

セパレータを指定して取り出す

 echo 'a,b,c' | awk -F , '{print $2}'
   => b

もしくは

 echo 'a,b,c' | awk 'BEGIN{FS=","} {print $2}'
   => b

ENDブロック

 ps -e -o vsz,cmd | grep httpd | awk '{sum+=$1} END {print sum}'
   => 1871064

全行処理後に合計メモリを表示。

print 関数

 echo 'a,b,c' | awk 'BEGIN{FS=","} { print "DEBUG: " $1 " & " $2 }'
   => DEBUG: a & b

文字列連結はスペース区切りで文字列や変数を列挙する。

printf 関数

 echo 'a,b,1' | awk 'BEGIN{FS=","} { printf( "DEBUG: %s & %d\n", $1, $3 ) }'
   => DEBUG: a & 1

printf()は改行が付かないので、自分で改行を付ける。

正規表現で行をフィルタする

 ifconfig eth0 | awk '/inet addr:/ {print $2}' | sed -e 's/addr://'

後方参照

 ifconfig eth0 | grep "inet addr:" | awk '{print gensub(/^.*inet addr:([^ ]+).*$/, "\\1", 1)}'

getnsub()を使う。

Perlを使う場合

 ifconfig eth0 | perl -ne 'print $1 . "\n" if /inet addr:(\S+)/'

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2014-08-04 (月) 05:20:39