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!
今回は時間と余白が迫っているのでこの辺で。。。