複数ファイルの特定行の印刷

複数ファイルの特定行の印刷

output.txt私は5000を超えるファイルコレクションを持っており、すべてのファイルとそのファイル名の27行目を含むファイルを作成したいと思います。私がインターネットから得たのは、awkorsedコマンドを使用して単一のファイルから特定の行を選択することです。たとえば、次のようになります。 $sed -n 27p *.txt >>output.txt

たとえば、ディレクトリ内の私のファイルは次のようになります。

log_1.txt
log_2.txt
log_3.txt
log_4.txt
.
.
.

私は各ファイルの行27とそのファイル名が新しいファイルの印刷された行の前後にあることを望みますoutput.txt

答え1

 awk 'FNR==27 {print FILENAME, $0}' *.txt >output.txt
  • FILENAME現在の入力ファイル名の組み込み awk 変数です。
  • FNR現在のファイルの行番号を参照します。
  • $0全体の行を表します。

答え2

別の可能性は次のとおりです。

for i in * ; do echo -n $i" : "  ; head -n 27 "$i" | tail -n 1 ; done > output.txt

答え3

forループを使用してください。

{ for i in *.txt; do echo "$i : $(sed -n '27p' "$i")"; done ;} >output.txt

5000を超えるファイルがあるため、屋根のfor費用がかかりますが、現在のハードウェアを考慮すると問題になりません。


より速い方法、sed27号線以降の出口(@Fiximanに感謝):

{ for i in *.txt; do echo "$i : $(sed -n '27p;q' "$i")"; done ;} >output.txt

答え4

簡単なawkの使い方:

awk 'FNR==27 {print FILENAME,$0}' /path/to/files/log_*.txt > outfile.txt

関連情報