Instiq
第3章 · GNUとUnixのコマンド·v1.0.0·更新 2026/7/6·読了目安 約12分

変更要約: 初版(主題1.03・副主題1.03.1〜1.03.5に対応)

3.2フィルタを使ったテキストストリームの処理

この節の要点

フィルタ=標準入力を加工して標準出力へ流すコマンド群を学びます。閲覧系(catlessheadtail)、抽出・整形系(cutsortuniqwcnltr)、結合・分割系(pastejoinsplit)、その他(sedodexpandunexpandfmtpr)の役割を押さえます。

UNIX 哲学は「小さな道具を組み合わせる」です。1つ1つは単機能のフィルタパイプでつなぎ、ログ集計や CSV 加工を数十文字で済ませるのが Linux 流のテキスト処理です。この節は道具箱の中身を揃える回で、つなぎ方(パイプ)は次節で扱います。

3.2.1閲覧・抽出・集計の定番

  • 閲覧=cat(全部を連結表示)・less(ページャで前後移動)・headtail(先頭/末尾 n 行。tail -f はログの追記を追いかける)。
  • 抽出=cut-d, -f2=区切り文字とフィールド指定)/変換=tr(文字の置換・削除。tr a-z A-Z)/行番号=nl
  • 集計=sort(並べ替え。-n 数値・-r 逆順)→ uniq連続する重複を除去・-c で件数)→ wc-l 行数)。uniq は sort 済みが前提が鉄則。

3.2.2結合・分割・そのほかの道具

  • paste=複数ファイルを行単位で横に連結/join共通フィールドで2ファイルを突き合わせ結合/split=大きなファイルを一定行数/サイズ序で分割。
  • sed=ストリームエディタ(sed 's/old/new/g' の置換が代表。詳細は 3.4)/od=バイナリを8進/16進で表示(octal dump)。
  • 空白・レイアウト=expandunexpand(タブ⇔スペース変換)・fmt(行の長さを整える)・pr(印刷向けにページ整形)。
試験ポイント

「ログを流し読み=less・追記を監視=tail -f」「CSV の2列目=cut -d, -f2」「重複行の件数=sort → uniq -c」「大文字化=tr」「タブ→スペース=expand」 が定番の対応です。uniq 単体では離れた重複を消せない(sort が先)は最頻出のひっかけです。

実戦のログ集計を一本組んでみると道具の役割が腑に落ちます。「アクセスログから IP 別のアクセス数上位を出す」は cut -d' ' -f1 access.log | sort | uniq -c | sort -nr | head -5cut で1列目(IP)を抜き → sort で同じ IP を隣接させ → uniq -c で件数付き重複除去 → sort -nr で件数の降順 → head で上位5件という流れです。それぞれのフィルタはファイルを書き換えず、流れてきたテキストを加工して次へ渡すだけ、という感覚が掴めれば合格圏です。join は「社員ID⇔名前」のようなマスタ突き合わせに使うリレーショナルな結合で、単純に横へ貼る paste と混同しないこと。splitsplit -l 1000 big.log part_ のように分割後の接頭辞を指定します。バイナリの中身をどうしても覗きたいときの od、印刷レイアウトの pr まで含め、「どの場面でどれか」を対応表で覚えるのが効率的です。

やりたいことコマンド要点
追記され続けるログを監視tail -fリアルタイムに追随
CSV の特定フィールド抽出cut -d, -f2-d 区切り・-f 列番号
重複行を数えるsort | uniq -cuniq は隣接行のみ対象
キーで2表を結合join横貼りは paste
注意

ひっかけ: 「uniq はファイル全体の重複行をすべて削除する」は誤りです。uniq が見るのは隣接行だけなので、先に sort で並べる必要があります。また「cat は大きなファイルの閲覧に最適」も実務的には誤り寄り=ページ移動できる less が適切で、cat は連結・小さなファイル向けです。

閲覧・抽出変換・集計結合の3分類にフィルタコマンドを整理した図。
sort してから uniq が鉄則

3.2.3この節のまとめ

  • 閲覧=cat/less/head/tail(-f)・抽出=cut・変換=tr・集計=sort→uniq(-c)→wc(uniq は sort 後)
  • 結合=paste(横貼り)/join(キー結合)・分割=split・他に sed/od/expand/fmt/pr

進捗の記録にはログインが必要です。

理解度チェック

(軽い確認用)

Q1. カンマ区切りの CSV ファイルから2番目のフィールドだけを取り出したい。適切なコマンドは?

Q2. ファイル内の重複行を「出現回数付きで」一覧にしたい。適切なコマンドの組み合わせは?

Q3. 稼働中のアプリケーションのログファイルに追記される内容を、リアルタイムで表示し続けたい。適切なコマンドは?

理解度を確認第3章「GNUとUnixのコマンド」の問題を解く