ちょいとawkなんかを使ってみた

awkって、今は使ってる人はあまりいないんだろうな。
僕もそんなに使って{る,た}わけじゃないんだけど、「これだけは!」っていうのがある。
ちょいとログを調べたりするときに、便利だと思うんだ。
それは…。

テキストファイルの区切り文字を指定して特定のフィールドを抜き出す方法

$ head -5 /etc/passwd | awk -F: '{print $1}'
root
daemon
bin
sys
sync
  • 区切り文字を -F で指定(この場合は:(コロン))
  • 抜き出すフィールドを $1 で指定(この場合は1番目のフィールド)
$ cat /var/log/apache2/access.log | awk '{print $1}' | sort | uniq
127.0.0.1
192.168.1.11
192.168.1.2
192.168.1.3
192.168.1.5
:(以下略)
  • フィールドセパレータ(フィールドの区切り文字)が、スペースやタブの場合は、-Fでの指定は不要。
  • sortコマンドでテキストを並べ替えて、
  • uniqコマンドで繰り返されているテキストを省く。
  • よって、この↑例では、access.logの1番目の項目であるWebサーバへのアクセス元のIPアドレスのリストを取り出している。

ちなみに、こんな↓こともできる。

(おまけ)合計を求める

$ cat num.txt
1
2
3
4
5
6
7
8
9
10
$ awk '{SUM+=$1}END{print SUM}' num.txt
55