Bash 使用sed提取行块

Bash 使用sed提取行块,bash,sed,text-processing,Bash,Sed,Text Processing,如何使用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;NPNPNn'myfile.dat>output.dat 或使用GNU sed(由于可移植性,不首选) sed'1~5b;2~5b;3~5b;d'myfile.

如何使用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;NPNPNn'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):

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

另一种选择:

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

请添加您尝试过的内容。。因为你没有增加研究工作,所以你的得票率很低。。。如果您是sed新手,请查看学习资源…这个问题可能有重复的地方。。。这里有一个跨站点的副本:它适用于我的示例,但是在一般情况下,当n和m较大时,它会非常不方便。
2450
-它们是连续的行吗?对于这种情况,
m
是什么?对于连续行,awk更适合:
awk-vn=3-vm=5'(NR-1)%m
太好了,谢谢!awk确实看起来更适合这个任务。有趣的是NC来自哪里?我在男士版CTAC_uu和Sundeep中找不到这方面的信息,你们都是对的——这只是因为他的每一行都有递增的数字。我已经编辑了我的答案,按照建议将
$NC
替换为
NR
。感谢您的回复,但是在您的第一个建议下,我收到了错误消息:sed:-e expression#1,char 6:未知命令:`+'只是一个输入错误,应该是
sed-n'1~5,+2p'
@potong,很棒的解决方案,先生++ve。
sed -n 'N;N;p;n;n' file