* awk [#n2c2a6a7]
** 文字列中のシングルクォートの表示 [#c11ae9fc]
awk "BEGIN { print \"That's it\" }"
=> That's it
awk 'BEGIN { print "That\'s it" }'
=> 間違い
シェルのエスケープの性格上、ワンライナーでシングルクォートを表示する場合は上の例のようにする。
** セパレータを指定して取り出す [#qb5215b5]
echo 'a,b,c' | awk -F , '{print $2}'
=> b
もしくは
echo 'a,b,c' | awk 'BEGIN{FS=","} {print $2}'
=> b
** ENDブロック [#dbf6f7b5]
ps -e -o vsz,cmd | grep httpd | awk '{sum+=$1} END {print sum}'
=> 1871064
全行処理後に合計メモリを表示。
** print 関数 [#x43ad016]
echo 'a,b,c' | awk 'BEGIN{FS=","} { print "DEBUG: " $1 " & " $2 }'
=> DEBUG: a & b
文字列連結はスペース区切りで文字列や変数を列挙する。
** printf 関数 [#u9c96832]
echo 'a,b,1' | awk 'BEGIN{FS=","} { printf( "DEBUG: %s & %d\n", $1, $3 ) }'
=> DEBUG: a & 1
printf()は改行が付かないので、自分で改行を付ける。
** 正規表現で行をフィルタする [#n023660b]
ifconfig eth0 | awk '/inet addr:/ {print $2}' | sed -e '/addr://'
ifconfig eth0 | awk '/inet addr:/ {print $2}' | sed -e 's/addr://'
** 後方参照 [#y4680f35]
ifconfig eth0 | grep "inet addr:" | awk '{print gensub(/^.*inet addr:([^ ]+).*$/, "\\1", 1)}'
getnsub()を使う。
*** Perlを使う場合 [#b8c0638d]
ifconfig eth0 | perl -ne 'print $1 . "\n" if /inet addr:(\S+)/'