複数のコマンドの連結
CoddyのTerminalジャーニー「基礎」セクションの一部 — レッスン 45/82。
2つのコマンドを接続するだけに限定されません。パイプを使用すると、必要な数だけコマンドを連結でき、それぞれが前のコマンドの出力を処理します。
単にさらに | 記号を追加して、パイプラインを拡張します:
cat data.txt | sort | head -5これはファイルを読み込み、すべての行をアルファベット順にソートし、次に最初の5つの結果のみを表示します。データは各コマンドを順番に左から右へと流れます。
ソートされた一意のエントリを見つける実用的な例を次に示します:
cat names.txt | sort | uniqファイルの内容が最初にソートされ(これにより重複がまとめられます)、次に uniq が連続する重複行を削除します。ここでは順序が重要です。uniq は隣接する重複のみを削除するため、最初にソートを行う必要があります。
さらに多くのステージを追加できます。ユニークな名前がいくつ存在するかを数えるには:
cat names.txt | sort | uniq | wc -l各パイプは、別の変換ステップを追加します。より長いパイプラインを構築するときは、各コマンドが入力として何を必要とし、出力として何を生成するかを考えてください。あるコマンドの出力形式は、次のコマンドの入力として意味をなすものでなければなりません。
チャレンジ
簡単ファイル visitors.txt には、重複を含む訪問者の名前のリストが含まれています。4つのコマンドをパイプラインで繋ぎ、ユニークな訪問者が何人いるかカウントしてください。
以下の処理を行う単一のコマンドを実行してください:
catを使用してvisitors.txtを読み込むsortにパイプして、名前をアルファベット順に並べ替えるuniqにパイプして、重複するエントリを削除するwc -lにパイプして、ユニークな名前の数をカウントする
ヒント: 複数の
|記号を使用して、4つすべてのコマンドを連結します。uniqは隣接する重複のみを削除するため、その前にソートを行う必要があることに注意してください。
自分で試してみよう
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。