第8回 | コマンドをつなげて小さな作業を片づける | 探す、抜く、並べる、数える、つなぐを通して見る|UNIX Cafe

* 当サイトでは、コンテンツの一部に広告を掲載しています。

System Note $ cat /proc/ai-disclosure

本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。

第8回 | コマンドをつなげて小さな作業を片づける | 探す、抜く、並べる、数える、つなぐを通して見る|UNIX Cafe

Unixコマンド実践 | 最終回

ここまでのシリーズでは、sort uniq cut xargs sed awk find を 1 つずつ見てきました。最終回では、それらを 1 本の小さな作業の中でつなげてみます。

1つずつ覚えるより、必要な場面で少しずつ組み合わせる。その感覚を作るためのまとめ回です。

ターミナルにまだ慣れていない方は、「長い 1 行を一気に理解する」のではなく、「小さな処理を順番につないでいる」と考えることが大切です。

今回は awksortuniqfindxargs を中心に組み合わせます。列の抜き出しは cut でもできますが、ここでは awk にまとめています。

📝 この記事で学べること

  • awk sort uniq をつないでログを見る方法
  • 出現回数を数えて多い順に並べる流れ
  • エラー行だけを抜き出す考え方
  • find xargs で複数ログをまとめて確認する方法
目次

まずは必要な列を抜き出して数える

access.log から 2 列目のパスだけを抜き出し、それを並べて件数を数えると、どのページがよく出てくるかが分かります。

たとえば access.log が次のような内容だとします。日付、パス、ステータスコードが空白区切りで並んでいます。

2026-05-01 /index.html 200
2026-05-01 /about.html 200
2026-05-01 /index.html 200
2026-05-01 /contact.html 404
2026-05-02 /index.html 200
2026-05-02 /about.html 500
2026-05-02 /index.html 200

このファイルでは、1列目が日付、2列目がパス、3列目がステータスコードです。まずはこの列の意味が分かっていると、その後のコマンドも読みやすくなります。

awk '{print $2}' access.log | sort | uniq -c | sort -nr

ここで出てくる | は、「左の結果を右へ渡す」という意味です。この 1 行は、次の 4 段階に分けて読めます。

  1. awk '{print $2}' access.log で 2 列目のパスだけを抜き出す
  2. sort で同じパスを隣どうしに集める
  3. uniq -c で、隣に並んだ同じ行が何回続いたかを数える
  4. sort -nr で件数の多い順に並べ替える

uniq は隣り合った行しか見ないので、先に並べておくのがポイントです。

最後の sort -nr は件数を -n(数字)・-r(逆順)で多い順に並べ替えます。

抜き出す、並べる、数える。この流れがつながるだけでも、ログの見え方は変わってきます。

実行すると、よく出てくるパスほど上に並びます。どこがよく見られているかをざっと確認したいときに分かりやすい形です。

      4 /index.html
      2 /about.html
      1 /contact.html

エラーだけを見る

全部を見るのではなく、200 以外の行だけを抜き出せば、404 や 500 の確認がしやすくなります。

awk '$3 != 200 {print $2, $3}' access.log

実行すると、次のような結果になります。

/contact.html 404
/about.html 500

ここでは 3 列目が 200 ではない行だけを取り出しているので、404 や 500 がどのページで起きているかをすぐ確認できます。全部を追うより、異常だけを見る方がずっと楽です。

複数ログをまとめて確認する

ログファイルそのものをまとめて見たいときは、findxargs が使えます。まず集めて、確認して、それから次へ渡します。

ここでは、いまのフォルダにもう 1 つ小さなログがある場合を考えます。次の 1 行で access2.log を用意しておきます。

echo "2026-05-03 /index.html 200" > access2.log

準備ができたら、.log で終わるファイルをまとめて探します。

find . -name "*.log" | xargs echo
find . -name "*.log" | xargs wc -l

find . -name "*.log". は「いまいるフォルダ」という意味で、その中から .log で終わるファイルを探します。xargs は、前のコマンドが出したファイル一覧を、次のコマンド(ここでは echowc)に引数として渡す役割です。

1 つ目のコマンドは、対象として何が渡るかを確認する段階です。実行すると、見つかったファイルが横に並びます。

./access2.log ./access.log

2 つ目のコマンドで、その対象ファイルの行数をまとめて見ています。

       1 ./access2.log
       7 ./access.log
       8 total

まず対象を集めて、次に何が渡るかを確認して、それから件数を見る。この順番がつながると、シリーズ前半で学んだ内容が 1 本の流れとして見えてきます。

つなげて使うと流れが見えやすくなる

このシリーズでは、コマンドをたくさん覚えることより、日常の小さな手作業をどう減らすかを中心に見てきました。単純なコマンドでも、順番に組み合わせるだけで役立ちます。

初心者が通し回でつまずくところ

通しでコマンドを並べると、どこで何をしているのか分からなくなりやすいです。そんなときは、1 行を一気に理解しようとせず、「抜き出す」「並べる」「数える」のように小さく区切って読むと整理しやすくなります。長いパイプは、短い処理の連結です。

また、途中結果を見ないままつなげると、どこでずれたのか見失いやすくなります。awk '{print $2}' access.log の段階で一度出力を見てから次へ進む、というように小刻みに確認する方が初心者には向いています。

結果をファイルに残したいなら、次のように保存できます。

awk '{print $2}' access.log | sort | uniq -c | sort -nr > popular_pages.txt

> は出力をファイルに書き出す記号です。ただし同じ名前のファイルがすでにあると、中身を上書きします。元の内容に書き足したいときは >> を使います。

awk は「必要な列を抜き出す」、sort は「並べる」、uniq -c は「件数を付ける」、findxargs は「複数ファイルをまとめて扱う」と短く整理しておくと、シリーズ全体の復習にもなります。

手を動かすミニ練習

ここまでの内容が整理できたら、本文とは別の列や条件に変えて、同じ考え方を使えるか確認してみましょう。最終回では「全部まとめて理解する」より、「小分けに確認しながら進める」ことを大切にします。

  1. awk '{print $3}' access.log | sort | uniq -c を見て、ステータスコードごとの件数を数えていると説明してみる
  2. awk '$3 == 404 {print $1, $2}' access.log を見て、404 の行だけから日付とパスを取り出していることを確認する
  3. awk '$3 != 200 {print $2}' access.log | sort | uniq を見て、エラーが出たパスの重複を整理する流れを左から順に読んでみる

実際に手元で試せる方は、見る列や条件を 1 つだけ変え、そのたびに画面の出力がどう変わるかを見ていくと理解しやすくなります。最初から複雑にするより、順番に確認しながら進める方が取り組みやすいです。

もう一度、はじめからゆっくりと

Unix コマンド実践シリーズは今回で一区切りです。ここまで見てくださってありがとうございました。ここまでの内容を土台に、また別のテーマへ少しずつ広げていきます。

はじめは少し手探りに感じた操作も、きっと違った景色に見えてくるはずです。

Unix コマンドは、一度で身につけるものではなく、何度か流れを行き来しながら、少しずつ手に馴染んでいく道具です。

最初の一歩に戻ることは、後退ではありません。それは、理解を確かなものにするための大切な一歩です。

👉 もう一度、第1回から読み直してみましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

のいのアバター のい UNIX Cafe マスター

Macintosh Color Classicから始まった旅は、長いWindows時代を経て、Windows10のサポート終了をきっかけにUNIXの世界へ戻ってきました。UNIX Cafeでは、UNIX・Linux・そしてMacな世界を、むずかしい言葉を使わず、物語のように書いています。プログラミングは、アイデアをコンピューターに伝えるための言葉です。簡単な単語と文法を覚えれば、誰でもコマンドを使えます。ぜひ一度、やさしいプログラミングの世界をのぞいてみてください。

Created by UNIX Cafe

目次