パターンに基づいて特定の行番号を出力します。

パターンに基づいて特定の行番号を出力します。

2760行のファイルがあり、2740行にIDがあります。その結果、常に上から7行を出力する必要があります。一部のファイルにはより多くの行が含まれ、一部のファイルにはより少ない行が含まれていますが、出力は常に7行の値です。

私が使っているのはgrep 'PATTERN' | sed -n '7p' yyyymmdd*.logパターンと一致しているようですが、ディレクトリで見つかった最初のファイルの7行を出力します。

誰もが私を正しい方向に押してもらえれば幸いです。

ベストアンサー1

特定のファイル名パターンと一致するには、各入力ファイルの7行が必要ですか?

awk 'FNR==7' file*

このawk変数はFNR現在の入力ファイルの行番号になります。 7の場合は、その行を印刷します。

またはGNUを使用してくださいsed

sed -n -s '7p' file*

GNUsedオプションは、-s入力ファイル間で内部ラインカウンタをリセットします(これは標準のGNU拡張ですsed)。

いくつかの正規表現に基づいて結果をフィルタリングする必要がある場合、またはgrep 'PATTERN'次のように出力をパイプ処理しますawk

awk 'FNR==7 && /PATTERN/' file*

またはGNUを使用してくださいsed

sed -n -s '7{/PATTERN/p}' file*

あなたの命令:

grep 'PATTERN' | sed -n '7p' yyyymmdd*.log

いくつかの問題:

  1. input がない場合は、grep標準入力ストリームから入力を待ちます。
  2. sed完全な入力ファイルセットから行7のみが選択されます(つまり、最初のファイルのみ)。対応するラインカウンタはファイル間でリセットされません。上記のようにsed-s
  3. パイプの2つの部分が接続されていません。sedでは読めませんgrep
  4. 不要grep。 7行だけで済みます。

おすすめ記事