Sed 从所有 txt 文件的第 6 行开始,并能够将所有结果输出到单个文件中

Sed 从所有 txt 文件的第 6 行开始,并能够将所有结果输出到单个文件中

我需要从第 6 行到最后对所有 *.txt 文件进行 sed 所有结果都应该位于一个新的单个文件中,每个文件的名称位于结果之前

示例:具有不同的 txt 文件,结果应该是一个从第三行到末尾的单个文件

file 1
3
4
5
file 2
3
4
5
file 3
3
4
5

答案1

使用 GNU sed

sed -s '1F;6,$!d' -- *.txt > output

可移植的是,您可以使用awk

awk 'FNR == 1 {print FILENAME}; FNR>=6' ./*.txt > output

(请注意,在这两种情况下,隐藏文件都被排除)。

空文件不会被引用,但少于 6 行的文件会被引用。如果您不想听到这些,您可以这样做:

sed -s '6F;6,$!d' -- *.txt > output
awk 'FNR == 6 {print FILENAME}; FNR>=6' ./*.txt > output

或者,如果您想查看所有文件:

for f in *.txt; do
  printf '%s\n' "$f"
  tail -n +6 < "$f"
done > output

使用 GNU tail,您还可以:

$ tail -vn +6 -- *.txt
==> a.txt <==
6
7
8
9
10

==> b.txt <==
6
7
8
9
10

相关内容