【发布时间】:2018-06-15 16:49:08
【问题描述】:
如何使用 sed 以每 m 行提取文件的 n 行?
假设我的文本文件如下所示:
我的文件.dat:
1
2
3
4
5
6
7
8
9
10
假设我要提取三行的块,然后在整个文件中跳过两行,这样我的输出如下所示:
输出.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 行。
【问题讨论】:
-
请添加您已经尝试过的内容。您正在投票,因为您没有添加研究工作...如果您是 sed 新手,请查看 stackoverflow.com/tags/sed/info 以获取学习资源...
-
这个问题可能在某处有重复...这是跨站点重复:unix.stackexchange.com/questions/325985/…
-
它适用于我的示例,但是在 n 和 m 很大的一般情况下会相当不方便。
-
2450- 它们是连续的行吗?在这种情况下,m是什么?对于连续的行,awk 会更适合:awk -v n=3 -v m=5 '(NR-1)%m < n' -
太好了,谢谢! awk 确实似乎更适合这项任务。
标签: bash sed text-processing