5000以上のファイルのコレクションがあり、すべてのファイルの27行目とそのファイル名を含むoutput.txt
ファイルを作成したいだけです。インターネットから得たものは、awk
またはsed
コマンドを使用して、単一のファイルから特定の行を選択することです。たとえば、$sed -n 27p *.txt >>output.txt
たとえば、ディレクトリ内のファイルは次のとおりです。
log_1.txt
log_2.txt
log_3.txt
log_4.txt
.
.
.
新しいoutput.txt
ファイルの印刷された行の前または後ろにファイル名を含む各ファイルの27行目が必要です。
awk 'FNR==27 {print FILENAME, $0}' *.txt >output.txt
FILENAME
は、現在の入力ファイル名の組み込みawk変数ですFNR
現在のファイルの行番号を参照$0
は行全体を意味します別の可能性は:
for i in * ; do echo -n $i" : " ; head -n 27 "$i" | tail -n 1 ; done > output.txt
for
ループの使用:
{ for i in *.txt; do echo "$i : $(sed -n '27p' "$i")"; done ;} >output.txt
for
ループは5000以上のファイルがあるので負荷がかかる可能性がありますが、現在のハードウェアでは問題になりません。
より高速な方法、27行目以降のsed
の終了(thanks @Fiximan):
{ for i in *.txt; do echo "$i : $(sed -n '27p;q' "$i")"; done ;} >output.txt
単純なawkの使用法:
awk 'FNR==27 {print FILENAME,$0}' /path/to/files/log_*.txt > outfile.txt