2015-03-19 102 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 

通過數據分組客棧每5NR%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