我有这个
line1
line2
line3
line4
line5
line6
line7
line8
line9
line10
line11
line12
line13
line14
line15
我的目标是
line1
line3
line4
line6
line7
line9
line10
line12
line13
line15
我尝试了下面的代码,但它没有做我想要的。我不确定我做错了什么。
awk 'NR == 1 || NR % 3 != 0' file
有关原因的任何线索?
答案 0 :(得分:7)
你有正确的想法使用% 3
- 只是off by one,因为你想从第2行而不是3开始删除。NR == 1
的测试是多余的,属于模数测试,但它没有造成任何麻烦:
$ awk '(NR+1) % 3' file
line1
line3
line4
line6
line7
line9
line10
line12
line13
line15
答案 1 :(得分:5)
你可以使用GNU sed:
sed -i '2~3d' test.txt
如果您不想保存结果,也可以删除-i
。
答案 2 :(得分:3)
要忽略示例输出中的行,请使用
awk 'NR % 3 != 2' file
答案 3 :(得分:2)
您可以使用:
awk '(NR+1)%3' file
line1
line3
line4
line6
line7
line9
line10
line12
line13
line15
这将跳过从第2行开始的每第3行。因此将跳过第2,5,8,11,14行。
答案 4 :(得分:2)
以下是使用便携式sed
进行此操作的一种方法。
要删除每第3行:
sed 'n; n; d' infile
要删除每第3行,请从第2行开始:
sed '1n; 2d; n; n; d' infile
输出:
line1
line3
line4
line6
line7
line9
line10
line12
line13
line15