从多个文件中打印特定行

从多个文件中打印特定行

我有 5000 多个文件的集合,我只想创建一个output.txt包含所有文件的第 27 行及其文件名的文件。我从互联网上得到的是使用awksed命令从单个文件中选择特定行,例如: $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可能会很昂贵,但考虑到当前的硬件应该不是问题。


更快的方法,sed在第 27 行后退出(感谢@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

相关内容