Q1パイプ|は何をする記号ですか?
パイプ — コマンドの連結
前のコマンドの出力を次へ渡す仕組みと、wc -lで行数、sortで並べ替え、sortとuniqで重複をまとめる定番の連結を、ブラウザ端末で操作しながら学べます。
パイプとは — | の意味
パイプ|は、前のコマンドの出力をそのまま次のコマンドの入力として渡す記号です。
1 つのコマンドの結果を別のコマンドで加工することで、小さなコマンドを組み合わせて目的を達成できます。
これは複数の単機能ツールをつないで処理を組み立てる Unix の設計思想です。
|は左の出力を右の入力へ渡し、単機能のコマンドを連結します。echo apple > fruits.txt # 1 行目を作成
echo banana >> fruits.txt # 追記
echo cherry >> fruits.txt # 追記
cat fruits.txt | wc -l # 行数を数える -> 3
ls / | wc -l # ルート直下の項目数
Linux console
0 / 4 実行済み
Loading Linux Terminal...
つなぐ相手は何でもよい
パイプは特定のコマンド専用ではありません。
標準出力を出すコマンドと、標準入力を受け取れるコマンドであれば自由につなげます。
ls | wc -lでファイル数、cat ファイル | sortで並べ替えなど、組み合わせは無数にあります。
echo log1 > lines.txt # 1 行目を作成
echo log2 >> lines.txt # 追記
echo log3 >> lines.txt # 追記
cat lines.txt | wc -l # 3
ls /etc | wc -l # /etc の項目数
Linux console
0 / 5 実行済み
Loading Linux Terminal...
| コマンド | パイプでの役割 |
|---|---|
| | 左の出力を右の入力へ渡す |
wc -l | 受け取った行数を数える |
sort | 受け取った行を辞書順に並べ替える |
uniq | 隣り合う重複行を 1 行にまとめる |
head / tail | 受け取った先頭 / 末尾だけを取り出す |
並べ替える — sort
sortは受け取った行を並べ替えるコマンドです。
既定では辞書順(文字列の順)に並べ替えます。
パイプで前のコマンドの出力を受け取り、整列した結果をそのまま画面や次のコマンドへ渡せます。
sortはパイプで受け取った行を辞書順に並べ替えて出力します。echo banana > fruits.txt # 並びをばらばらに作る
echo apple >> fruits.txt
echo cherry >> fruits.txt
cat fruits.txt | sort # apple / banana / cherry に並ぶ
Linux console
0 / 4 実行済み
Loading Linux Terminal...
重複をまとめる — uniq
uniqは連続して重複する行を 1 行にまとめるコマンドです。
uniqは隣り合った行だけを見るため、離れた場所にある同じ行はまとめられません。
重複を確実に 1 行にしたいときは、先にsortで同じ行を隣へ集めてからuniqへつなぐsort | uniqが定番です。
sortで重複を隣に集め、uniqで連続した重複を 1 行にまとめます。echo pear > list.txt # 重複を含む素材を作る
echo apple >> list.txt
echo pear >> list.txt
cat list.txt | sort # apple / pear / pear
cat list.txt | sort | uniq # apple / pear
uniq の前に sort
uniqは隣り合った行だけを重複として見ます。
離れた場所にある同じ行はまとめられないため、重複を 1 行にしたいときは先にsortで並べ替えてからuniqにつなぎます。
Linux console
0 / 5 実行済み
Loading Linux Terminal...
QUIZ
理解度チェック
まずは1問ずつ答えてみましょう。
Q2cat fruits.txt | wc -lを実行すると何が表示されますか?
Q3重複した行を 1 行にまとめたいとき、uniqの前につなぐと効果的なコマンドはどれですか?