5 記事
続・Linuxコマンド入門 ~パイプとリダイレクトを使いこなす~
Linuxコマンドの出力に対して処理してデータを加工したり、処理を自動化する「コマンド結合」の方法について紹介します。
前回は、コマンドとコマンドを |(パイプ) で繋ぎ、あるコマンドの結果を次のコマンドの入力として渡す「ベルトコンベア」のような仕組みを学びました。
第1回(リダイレクト): > >> 2> を使い、結果(出力)を「バケツ(ファイル)」に溜める方法。
第2回(パイプ): | を使い、結果(出力)を「次の機械(コマンド)」に渡す方法。
【 | 】コマンドを繋げる「パイプ」~ | の使い方~【続・Linuxコマンド入門 #2】
コマンドを繋げる「パイプ (|)」入門!あるコマンドの結果を、ls | grep のように次のコマンドへ直接渡す仕組みを、初心者向けにわかりやすく解説します。
今回は、これらを組み合わせて使う実践編です。 さらに、第1回で学んだ「出力」の逆、「入力のリダイレクト」もここでマスターし、コマンドにデータを渡す方法を完璧にします。

1. 今回のゴール:データ加工と保存
今回のゴールは、|(パイプ)でデータを流れ作業で加工し、>(リダイレクト)で最終結果をファイルに保存することです。
2. 新しい技術(入力のリダイレクト)
第1回では、コマンドの「出力」の行き先を変える > や >> を学びました。 ここでは、コマンドの「入力」の元を変更する < と << を学びます。
2-1. < (入力リダイレクト)
> が「標準出力(蛇口の水)」をファイルに向けるのに対し、< はファイル(水源)をコマンドの「標準入力(機械の投入口)」に接続します。
例えば、wc -l は通常、入力待ちになりますが、< を使うとファイルを行数カウントの「入力」として渡せます。
# sample_log.txt を wc -l の「入力」として渡す
wc -l < sample_log.txt
# 6
(これは cat sample_log.txt | wc -l と非常に似た動作をしますが、cat を省略できる分、より直接的です。)
2-1. << (ヒアドキュメント)
これが、今回サンプルファイルを作るために使う重要な機能です。 << は「Here Document(ここにあるドキュメント)」の略で、ファイルからではなく、今このターミナルから入力する複数行のテキストを、コマンドの「標準入力」として渡します。区切り文字を入力するまでコマンドに入力できます。
[コマンド] << [区切り文字] ([区切り文字] は EOF や END など、自分で決めた好きな単語でOKです)3. データ処理で便利なコマンドの紹介
流れ作業を実装するとき便利なコマンドを2つ紹介します。
3-1. wc (word count)
: 行数 (Lines) を数える。wc -l
wc -l3-2. sort 並べ替え
sort: 行単位で並び替える(ソートする)。
sort4. 実践!パイプとリダイレクトでデータを加工する
それでは、実際にコマンドを繋げてみましょう。 まず、練習用のログファイル sample_log.txt を作ります。
ここで、先ほど学んだ <<(ヒアドキュメント)と、第1回で学んだ >(出力リダイレクト)を組み合わせます。
# cat コマンドの「入力」として、ターミナルからの複数行 (<< EOF) を渡す
# そして、cat コマンドの「出力」を、ファイル ( > sample_log.txt) に保存する
cat > sample_log.txt << EOF
[INFO] Application started.
[WARN] Network connection is slow.
[ERROR] Database connection failed.
[INFO] User 'admin' logged in.
[ERROR] File not found: /var/log/data.txt
[INFO] Shutting down...
EOF解説:
catコマンドが起動します。<< EOFにより、「EOFという行が現れるまで」の入力をcatの標準入力に渡します。> sample_log.txtにより、catの標準出力(入力された内容がそのまま出てくる)がsample_log.txtに保存されます。
これで sample_log.txt ができました。
シナリオ1:ログファイルから「ERROR」の件数を数えてファイルに保存する
ゴール: sample_log.txt から “ERROR” を含む行だけを抜き出し、それが**何行あったか(件数)**を error_count.txt というファイルに保存する。
手順:
catでファイルを次に流す。|(パイプ) でgrepに渡し、”ERROR” で絞り込む。|(パイプ) でwc -lに渡し、絞り込んだ結果の「行数」を数える。>(リダイレクト) で、最終的な「行数(数字)」をerror_count.txtに保存する。
コマンド:
cat sample_log.txt | grep "ERROR" | wc -l > error_count.txt結果の確認:
cat error_count.txt
# 2エラー件数の集計が自動化できました。
シナリオ2:「INFO」のログを並び替えて保存する
ゴール: sample_log.txt から “INFO” を含む行だけを抜き出し、それらをアルファベット順に並び替えて info_sorted.txt に保存する。
コマンド:
cat sample_log.txt | grep "INFO" | sort > info_sorted.txt結果の確認:
cat info_sorted.txt
# [INFO] Application started.
# [INFO] Shutting down...
# [INFO] User 'admin' logged in.Application, Shutting, User の順に並び替えられているのがわかりますね。
まとめ
今回は、|(パイプ)と >(リダイレクト)を組み合わせる実践編でした。 さらに、新たに入力リダイレクト < と <<(ヒアドキュメント)も学びました。
cat [ファイル] | grep [条件] | wc -l > [結果ファイル]|(パイプ) : コマンド(機械)を連結し、データを流れ作業で加工する。>>>2>(出力リダイレクト) : 結果(出力)をファイルに保存する。<<<(入力リダイレクト) : ファイルや複数行テキストをコマンド(機械)の入力にする。
次回は、データの「流れ」ではなく、コマンドの「実行順序」を制御する方法を学びます。 「もしコマンドAが成功したら、次にBを実行する」といった、より高度な自動化のための && や || を紹介します。
処理を自動化する「コマンド結合」~ && と || と ; の違い~【続・Linuxコマンド入門 #4】
Linuxコマンド && と || と ; の違い知ってる?「成功したら次」「失敗したら次」「必ず次」の実行順序を制御し、処理を自動化する方法を初心者向けに解説します。
5 記事
続・Linuxコマンド入門 ~パイプとリダイレクトを使いこなす~
Linuxコマンドの出力に対して処理してデータを加工したり、処理を自動化する「コマンド結合」の方法について紹介します。