|
awk一行プログラム
覚えると便利。使わないと忘れるawk。
ついついperlでやってしまうことも、awkで一行で出来る事も多いですよ。
ファイルの合計サイズを求める
$ls -la | awk ' {x += $5}; END {print x}'
lsの結果の5番目(バイト数)を順番に足して最後に表示するというプログラム。
OSによっては、バイト数の表示位置が変わることがあるので注意
wc -c * | awk '$2~/合計/ {print $1}'でも良さそうだが、2バイト文字が入ると
どうも上手くいかない。"合計"の部分が、英字表記なら上手くいきます。
ファイルの合計ステップ数を求める
$wc -l *.sh | awk '{x += $1}; END {print x/2}'
こんなものが、今時必要になるかは疑問だが、シェル等のステップ数を求めるプログラム。
Linux系のwcだと、最後に合計行が入るので2で割っている。
solaris等でwcをしたら、最後に合計はなかったような・・・。(未確認)
入力データ中のn文字以上の行を取り出す
$awk 'length($0) > n' hoge.dat
ログの解析の時に、微妙に役に立つことがある。
$0で行全体が対象になるので、項目指定の時は$nで使用すること。
多分、他のコマンドと併用することになるでしょう。
ファイルの件数を数える
$ls | awk ' { x += 1} END { print x }'
ファイル数を数えます。
特定の文字列を置換する
$awk '{sub(/-/,","); print $1,$4}'
"-"を","に置換
区切り文字の変更
$awk -Fc
cの部分に、任意の区切り文字をセットする
【参考にしたサイト】
The GNU Awk User's Guido
The GAWK Manual - String Functions
|