awkコマンドのすばらしさ

shell

awkコマンドってn番目も出力するだけだと思っていませんか?

上記の使い方はよくある使い方ですね

$ cat sample.txt
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
$ cat sample.txt | awk '{print $2}'
2
2
2
2
2
2
2
2
2

意外と知られてないのですが、awkには項目の足し算をする機能がついています

$ ls -l
total 21
-rw-r--r--   1 tech tech    5021  4月  6日  12:53 access_log
-rw-r--r--   1 tech tech    4871  4月  6日  09:48 access_log.1
-rw-r--r--   1 tech tech    4922  4月  6日  09:45 access_log.2
-rw-r--r--   1 tech tech    4502  4月  6日  09:49 access_log.3
-rw-r--r--   1 tech tech    8475  4月  6日  09:44 access_log.4
-rw-r--r--   1 tech tech    1005  4月  6日  09:48 error_log
-rw-r--r--   1 tech tech    1005  4月  6日  09:48 error_log.1
-rw-r--r--   1 tech tech    1751  4月  6日  09:45 error_log.2
-rw-r--r--   1 tech tech    1679  4月  6日  09:49 error_log.3
-rw-r--r--   1 tech tech     395  4月  6日  09:44 error_log.4

上記のようなログがあってアクセスログの総容量を計算したいなんて時ありますよね

こんな時にもawkが使えます

$ ls -l access* | awk '{total+=$5} END {print total}'
27791

lsでaccessから始まるファイルだけを出力して、5番目の項目と足し算して表示しています。

今後もシェルで便利なコマンドがあったら投稿していきたいと思います。

コメント