我有这个
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
任何想法为什么?
答案 0 :(得分:3)
如果我正确解读您的要求,那么
awk 'NR % 5 != 2 && NR % 5 != 4' file
应该这样做。
答案 1 :(得分:2)
基于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
将数据分组分组到每个5
行NR%5
,
我们看到要删除的行在每个组中都是2
或4
。
NR%5!~/^[24]$/'
这将数据分为5
组
然后,此部分/^[24]$/'
告诉不要保留2
或4
^
和$
非常重要,因此我也删除了12
47
行,
由于12
包含2
。所以我们需要锚定它^2$
和^4$
。
答案 2 :(得分:2)
使用GNU sed,您可以执行以下命令:
sed '2~5d;4~5d' test.txt