awk 或 sed - 删除特定行

awk or sed - delete specific lines

我知道了

line1
line2
line3
line4
line5
line6
line7
line8
line9
line10
line11
line12
line13
line14
line15

我要这个

line1
line3
line5
line6
line8
line10
line11
line13
line15

如你所见,要删除的行从x+2到x+3,x等于要删除的行号。

我用 awk 试过了,但这不是正确的方法。

awk '(NR)%2||(NR)%3' file > filev1

知道为什么吗?

如果我正确解读了您的要求,那么

awk 'NR % 5 != 2 && NR % 5 != 4' file

应该做。

基于 Wintermutes 逻辑 :)

awk 'NR%5!~/^[24]$/' file
line1
line3
line5
line6
line8
line10
line11
line13
line15

awk 'NR%5~/^[013]$/' file

它是如何工作的。

从你的台词可以看出,*的应该去掉,其他的保留。

line1
line2*
line3
line4*
line5

line6
line7*
line8
line9*
line10

line11
line12*
line13
line14*
line15

通过将数据客栈分组到每个 5NR%5
我们看到要删除的行在每个组中都是 24NR%5!~/^[24]$/'这个分数据栈到5
然后这部分 /^[24]$/' 告诉不要保留 24
^$ 很重要所以行 12 47 我也删除了,
因为 12 包含 2。所以我们需要锚定它 ^2$^4$.

使用 GNU sed,您可以执行以下命令:

 sed '2~5d;4~5d' test.txt