パイプ活用:実践的なコマンド連携
パイプ活用 とは
パイプを使って、複数のコマンドを連携させる実践的なテクニックを解説します。本レッスンでは、パイプ活用 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。
なぜ重要か
ここまで学んだ grep / sed / awk / sort / uniq / wc などは、それぞれ単独でも便利ですが、パイプでつなぐことで真価を発揮します。ログ調査、データ集計、CSV のクレンジング、コードベースのリファクタリングなど、現場の作業はほとんどが「複数コマンドの組み合わせ」で進みます。
このレッスンでは、よく使う組み合わせパターンをいくつか紹介し、最後に簡単な集計を演習で体験します。
よく使う部品
| コマンド | 役割 |
|---|---|
sort | 行をソートする (-n 数値、-r 逆順、-k 列指定) |
uniq | 連続する重複を 1 つに、-c で件数を付ける |
wc | 行数 (-l)、語数 (-w)、バイト数 (-c) を数える |
cut | 区切りに基づき列を取り出す (-d 区切り、-f 列番号) |
head / tail | 先頭 / 末尾を取り出す (-n で行数) |
tr | 文字を変換 / 削除 (tr a-z A-Z で大文字化) |
動作の図解
「抽出 → 整形 → 集計 → ランキング → 上位 N 件」という流れは、ログ解析の定番パターンです。
ランキング集計
単語の出現回数ランキングを作る例です。
ターミナル
$ echo -e "apple\nbanana\napple\ncherry\napple\nbanana" | sort | uniq -c | sort -nr
3 apple
2 banana
1 cherry手順を分解すると次のようになります。
sortで同じ語を隣接させるuniq -cで連続重複を「件数 + 語」に変換するsort -nrで件数の降順に並べ替える
uniq はあくまで「隣接する」重複しか見ないため、必ず先に sort するのが鉄則です。
アクセスログの集計
アクセスログから IP ごとのアクセス回数 TOP3 を出す例です。
ターミナル
$ cat access.log | awk '{ print $1 }' | sort | uniq -c | sort -nr | head -3
150 192.168.1.10
98 10.0.0.5
42 172.16.0.1awk '{ print $1 }' で IP 列だけを抜き出し、定番の集計パイプラインを通しています。同じパターンで「ステータスコードのランキング」「リクエストパスのランキング」など、さまざまな切り口の集計を組めます。
大きなファイルでは
cat file | grep ...ではなくgrep ... fileの方が無駄なプロセスが減ります。とはいえ「読みやすさ優先で cat から始める」流派もあるので、チームの好みに合わせるとよいでしょう。
CSV の集計
スペース区切りでなく , 区切りの場合、-F, を使います。
ターミナル
$ echo -e "alice,30\nbob,25\ncarol,28" | awk -F, '{ sum += $2 } END { print sum }'
83行数カウントとフィルタの組み合わせ
ファイル内のキーワード出現行数だけ知りたい場合は次のように書きます。
ターミナル
$ grep -c ERROR /tmp/app.log
23複数ファイルにまたがって調べたいときは grep -c ERROR /var/log/*.log のように展開します。
文字変換のひと工夫
tr を使うと、改行や大文字小文字を変換できます。
ターミナル
$ echo "hello world" | tr ' ' '\n'
hello
worldスペース区切りを改行区切りに変えてから sort | uniq -c に流すと、英文の単語頻度を簡単に数えられます。
パイプライン処理は左から右に読み下せるため、コメントを書かなくても「何をやっているか」が読み取りやすいのが長所です。複雑になりすぎたら、シェルスクリプトに切り出し、変数や関数で意味を補うのがおすすめです。
やってみよう
演習では echo で複数の単語を出力し、ランキング集計のパイプラインを組み立てます。sort → uniq -c → sort -nr の流れを覚えてください。
大文字小文字をそろえてカウント
単語頻度を測るとき、Apple と apple を別物と数えてしまうと意図に合わないことがあります。tr で小文字に揃えてから数えるのが定番です。
ターミナル
$ echo -e "Apple\napple\nBANANA\nbanana" | tr 'A-Z' 'a-z' | sort | uniq -c
2 apple
2 bananaヘッダー付き CSV の集計
CSV ファイルはたいてい 1 行目が見出し行です。awk の NR > 1 で見出しをスキップしながら集計できます。
ターミナル
$ cat sales.csv | awk -F, 'NR > 1 { sum += $3 } END { print sum }'まとめ
grep/awk/sort/uniq/headをつなぐと多くの集計ができる- ランキングは sort → uniq -c → sort -nr の順が定番
- CSV は
awk -F,、TSV はawk -F$'\t'で読める - 大文字小文字をそろえるには tr で前処理
- パイプラインが長くなったらスクリプトに切り出し、可読性を保つ
次のレッスン
次は テキスト処理チェック で、パイプを使って、複数のコマンドを連携させる実践的なテクニックを解説します を学びます。
事前確認 — 進む前に次の 3 つができることを確認しましょう。
- パイプライン実践 の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. パイプライン実践 とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン
課題
- echo で単語リストを作る
- sort | uniq -c | sort -nr の順で集計
- awk '{ print $1, $2 }' で整形