プログラマでありたい

おっさんになっても、プログラマでありつづけたい

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で使用すること。
  多分、他のコマンドと併用することになるでしょう。

ファイル中の特定のカラムの数字がn以上の行を取り出す
 cat <span style="font-style:italic;">hoge.txt</span> | awk ' $2 > 100 '
 例えば、このようなフォーマットだと
 yahoo.co.jp	14000000
 google.co.jp	3800000
 fireking.jp	38

 上記二件だけ出てくる。
 カンマ区切りの場合だと、すこし工夫が必要


ファイルの件数を数える
 $ls | awk ' { x += 1} END { print x }'
   ファイル数を数えます。
 ⇒ls | wc 使えって

特定の文字列を置換する
  $awk '{sub(/-/,","); print $1,$4}' 
"-"を","に置換

区切り文字の変更
  $awk -Fc
cの部分に、任意の区切り文字をセットする