2015-03-19 66 views
0

我有了这个AWK或sed的 - 删除特定行

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

喜@anubhava,应删除的线2号线,4,7,9,12,15等.. – 2015-03-19 10:06:30

+1

应该把它不是:'2,4,7,9,12,14'? – anubhava 2015-03-19 10:12:34

+0

的确是2,4,7,9,12,14。对不起@anubhava -_- – 2015-03-19 10:14:08

回答

3

如果我正确破译你的要求,那么

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

应该做的。基于Wintermutes逻辑

+0

嗨@Wintermute,不错。那个'或'不好。该死的! – 2015-03-19 10:19:29

+0

不错!我喜欢@Jotne的调整,因为它消除了两次计算'NR%5'的冗余度,所以'awk'NR%5!〜/^[24] $ /'file'。 – 2015-03-19 13:14:17

2

:)

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或各组4NR%5!~/^[24]$/'这种分数据客栈的5
组,然后这部分/^[24]$/'告诉跟不上24
^$是重要的,所以线1247我删除过,
因为12包含2。所以我们需要将其固定为^2$^4$

+0

嗨@Jotne,你能解释一下吗? – 2015-03-19 10:20:02

+0

'^ [013] $'是什么? – 2015-03-19 10:21:04

+0

@AndyK看到我的更新。这个''[013] $'给出数字'0'或'1'或'3' – Jotne 2015-03-19 10:27:55

1

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

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