使用 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
如何使用 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