複数のコマンドの連結
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 には、重複を含む訪問者名のリストが含まれています。3つのコマンドをパイプラインで繋いで、ユニークな訪問者の数をカウントしてください。
以下の処理を行う単一のコマンドを実行してください:
catを使用してvisitors.txtを読み込むsortにパイプして、名前をアルファベット順に並べ替えるuniqにパイプして、重複するエントリを削除するwc -lにパイプして、ユニークな名前の数をカウントする
ヒント: 複数の
|記号を使用して、4つすべてのコマンドを連結します。uniqは隣接する重複のみを削除するため、その前にソートを行う必要があることに注意してください。
チートシート
パイプを使用すると、複数のコマンドを連結でき、各コマンドが前のコマンドの出力を処理します。コマンドを接続するには | 記号を使用します。
cat data.txt | sort | head -5データは各コマンドを順番に左から右へと流れます。
重複のないソートされたエントリを見つけるには:
cat names.txt | sort | uniquniq コマンドは連続する重複行を削除するため、重複をまとめるために最初にソートを行う必要があります。
重複のないエントリをカウントするには、パイプラインに wc -l を追加します:
cat names.txt | sort | uniq | wc -lパイプラインを構築する際は、あるコマンドの出力形式が次のコマンドの入力として適切であることを確認してください。
自分で試してみよう
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。