使用 sed 提取行块

Extract blocks of lines with sed

如何使用 sed 每隔 m 行提取文件的 n 行?

假设我的文本文件如下所示:

myfile.dat:

1
2
3
4
5
6
7
8
9
10

假设我想提取三行块,然后在整个文件中跳过两行,这样我的输出如下所示:

output.dat:

1
2
3
6
7
8

关于如何使用 sed 实现这一目标有什么建议吗?

编辑:

对于我的示例,我可以使用

sed -n 'p;n;p;n;p;n;n' myfile.dat > output.dat

或使用 GNU sed(由于可移植性而不是首选)

sed '1~5b;2~5b;3~5b;d' myfile.dat > output.dat

但是,我通常想从一个包含 49 002 450 行的文件中打印 2450 行的块,这样我的输出文件就包含 247 450 行。

在您的情况下,以下方法可行。它正在检查除以 5 的余数是否在 1 和 3 之间:

awk 'NR%5==1, NR%5==3' myfile.dat

这可能适合您 (GNU sed):

sed -n '1~5,+2p' file

从第 1 行开始,以模数 5 和以下两行打印行号。

备选方案:

sed -n 'N;N;p;n;n' file