LoginSignup
1
1

みなさんこんにちは!

最近、クラウドの発達によって、以前よりオンプレでの開発機会が少なくなってきましたね。

元々UnixやLinuxでガリガリ開発していた身としては、少々寂しさもありつつ、便利な世の中になったな、と思うところもあります。

初心に返る意味も込めて、昔よく使ってたコマンドの記事を書こうと思います。

awkコマンド

今回は、awkコマンドです。
IT業界に入って最初のプロジェクトがインフラだったので、とてもお世話になりました。
先輩方と一緒にターミナルに向かいながらしのぎを削ってたのは、今となっては懐かしい思い出です。

awsコマンドとは

テキスト処理のためのプログラミング言語で、シェルスクリプトと組み合わせて使われることが多いです。私がよく利用していたケースには以下のものがあります。

  • ログファイルの解析
    システムログやアプリケーションログなど、定形フォーマットのログファイルを解析し、情報を抽出。

今回は、最もよく利用したアクセスログの解析について書こうと思います。

アクセスログ

以下は、Webサーバのアクセスログの例です。各行は一つのリクエストを表し、IPアドレス、日時、リクエストメソッド、URL、ステータスコード、応答サイズなどの情報が含まれています。

192.168.1.1 [01/Jan/2023:10:00:00 +0000] "GET /index.html HTTP/1.1" 200 512
192.168.1.2 [01/Jan/2023:10:05:00 +0000] "POST /login.php HTTP/1.1" 200 244
192.168.1.1 [01/Jan/2023:10:10:00 +0000] "GET /about.html HTTP/1.1" 200 768
192.168.1.3 [01/Jan/2023:10:15:00 +0000] "GET /aaa.html HTTP/1.1" 404 0

ここで、200は正常、404はNot Foundですね。

awkとシェルを使った簡易的な集計

先ほどのアクセスログから、IPアドレスとリクエストURLを抽出し、それぞれのIPアドレスからのリクエスト数を集計してみましょう。

awk '{print $1, $7}' access.log | sort | uniq -c | sort -nr

このコマンドを順番に見ていきましょう。

awk '{print $1, $7}' access.log

各行からIPアドレス(1つめのフィールド)とリクエストURL(7つめのフィールド)を抽出。

| sort

抽出したデータをソートします。
ここで「|」はパイプと呼ばれ、前の結果をキャッシュして次のコマンドに渡す。

| uniq -c

重複する行(同じIPとURLの組み合わせ)をカウント。

| sort -nr

リクエストの多い順に並び替えます。

実行結果

$ awk '{print $1, $7}' access.log | sort | uniq -c | sort -nr
   2 192.168.1.1 200
   1 192.168.1.3 404
   1 192.168.1.2 200

192.168.1.1からのリクエストは2件、それ以外は1件という結果になりました。

ちゃんと集計できていましたね!

このように、コマンドをうまく組み合わせることで、簡単に集計ができます。
今でもたまに利用しているので、みなさんもぜひ、コマンドの楽しさを体験してください!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1