如何为每组 n 行删除一系列行?

如何为每组 n 行删除一系列行?

我想从一个如下所示的文件开始:

1
2
3
4
5
1
2
3
4
5
1
2
3
4
5

仅返回每组五个中的最后三个,如下所示:

3
4
5
3
4
5
3
4
5

我已经成功使用如下代码获得了前 2 个:

awk -vn=2 -vm=5 'NR<=i{next}; (NR-i)%m==1{c=1}; c++<=n

但我在对最后一个分组做同样的事情时遇到了麻烦。

答案1

使用模运算这些事情通常更容易,例如

awk '(NR-2)%5 && (NR-1)%5' file
3
4
5
3
4
5
3
4
5

或者,使用 GNU sed 的n~m(“n 跳过 m”)表示法:

sed '1~5d;2~5d' file

相关内容