テックブログ

技術ネタ

awk入門

皆さん初めまして。yasakumaです。

初めての投稿になり、どんな記事にしようか結構迷いました(泣)

折角の初投稿なので、よく使うようになったコマンドを
ご紹介させていだければと思いました。

昔、別の会社でコマンドはさわる機会がありましたが、
テキスト処理はほぼ使っていなく新鮮でしたので、そちらをメインに記事にできればと思います~

それでは。

awk

これ、ものすごく使います。使えます。
コマンドの結果や、テキストの特定の列だけを抽出したい。等の目的で利用しています。

適当なファイルを準備してみてみましょう。
下記のようなファイルがあったとします。

[root@yasakuma ~]
# cat akitabi
tokyo    takaosan  1021:sato
kanagawa hakone    1021:sasaki
kanagawa hiratsuka 1022:yasa
chiba    naritasan 1020:yasa
ibaraki  senbako   1021:sato
gunma    kusatsu   1020:sasaki
saitama  hanno     1021:yasa

内容は秋旅の希望アンケートで、都道府県、場所、投稿日:投稿者となっています。

ここから都道府県だけ抽出する場合

[root@yasakuma ~]
# cat akitabi | awk '{print $1}'
tokyo
kanagawa
kanagawa
chiba
ibaraki
gunma
saitama

さて、次は投稿者を抽出します。
同様に$3指定で出力すると余計な投稿日までついてきてしまいます。

[root@yasakuma ~]
# cat akitabi | awk '{print $3}'
1021:sato
1021:sasaki
1022:yasa
1020:yasa
1021:sato
1020:sasaki
1021:yasa

ここでオプション -F の登場です。
区切り文字を”:”にして、2列目を抽出させます。

[root@yasakuma ~]
# cat akitabi | awk -F ":" '{print $2}'
sato
sasaki
yasa
yasa
sato
sasaki
yasa

できました!
折角なのでカウントしてみます。(sort、unicコマンドにて)

[root@yasakuma ~]
# cat akitabi | awk -F ":" '{print $2}' | sort | uniq -c | sort -nr
      3 yasa
      2 sato
      2 sasaki

素晴らしいですね!
誰がどれだけ投稿したか、コマンドだけで集計できてしまいました。

今回使用したファイルの代わりに、サーバーのログ等を使用して
不審な接続元や、接続数のカウントも場合によっては出来てしまいます。。。

いかがでしたでしょうか。

最初はあれだけ嫌いだったawkが今では相棒のようです。
cutやxargsといったコマンドとも相性がよく、使い方は無限大。

凄いですね、awk!

今回は時間と余白が迫っているのでこの辺で。。。


実績数30,000件!
サーバーやネットワークなど
ITインフラのことならネットアシストへ、
お気軽にご相談ください