Bash 使用sed提取行块
如何使用sed每m行提取文件的n行 假设我的文本文件如下所示: myfile.dat: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.
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