bash - 如何删除文件的每个第n行

And*_*y K 3 bash awk

我有这个

line1
line2
line3
line4
line5
line6
line7
line8
line9
line10
line11
line12
line13
line14
line15
Run Code Online (Sandbox Code Playgroud)

我的目标是拥有

line1
line3
line4
line6
line7
line9
line10
line12
line13
line15
Run Code Online (Sandbox Code Playgroud)

我尝试了下面的代码,但它没有做我想要的.我不确定我做错了什么.

awk 'NR == 1 || NR % 3 != 0' file 
Run Code Online (Sandbox Code Playgroud)

有什么线索的原因?

Ben*_*imm 7

你有正确的想法使用% 3- 只需一个,因为你想从第2行而不是3开始删除.测试NR == 1是多余的,属于模数测试,但它没有造成任何麻烦:

$ awk '(NR+1) % 3' file
line1
line3
line4
line6
line7
line9
line10
line12
line13
line15
Run Code Online (Sandbox Code Playgroud)


Ada*_*dam 5

你可以使用GNU sed:

 sed -i '2~3d' test.txt
Run Code Online (Sandbox Code Playgroud)

-i如果您不想保存结果,也可以删除它.