複数のラインセットをキャッチするためのヘッド/テールコマンド

複数のラインセットをキャッチするためのヘッド/テールコマンド

1つのコマンドでファイルの最初の2行(43行と44行)と最後の2行をインポートする必要があります。 &&または;同じ特殊演算子を使用せずに、ヘッド、テール、パイプコマンドのみを使用してそれらを印刷できますか?私が考えることができるのはこれだけです。

(cat cool | head -n 2) | (tail -n +43 | head -n 2) | (tail -n  2)

しかし、猫がいます...もう一つのオプションは

(head -n 2 < cool) | (tail -n +43 < cool | head -n 2) | (tail -n 2 < cool)

ただし、何らかの理由で最後の行のみが表示されます。

ベストアンサー1

cat cool | headはい連合大学(猫を使うのは役に立ちません)。 2番目のコードを確認してみましょう。

(head -n 2 < cool) | (tail -n +43 < cool | head -n 2) | (tail -n 2 < cool)

驚くべきことは、| command < coolstdinを2回リダイレクトすることです。前のパイプラインコマンドの結果またはファイルを選択する必要がありますcool。どちらもオプションではありません。

今質問に戻ります。ソリューション単一ファイルの読み取り例:

  • 最初の42行を読み、最初の2行だけを表示し、次の40行を削除します。これは次のように翻訳されますhead -n 42 | head -n 2
  • 次の2行(行43と44)を表示します。これは次のように翻訳されますhead -n 2
  • 最後の2行を表示します。これは次のように翻訳されますtail -n 2

さて、これらすべてを総合してみてください。

( head -n 42 | head -n 2; head -n 2; tail -n 2 ) < cool

別の同様の推論:

( head -n 2; head -n 42 | tail -n 2; tail -n 2 ) < cool

おすすめ記事