2011-11-24 125 views

回答

2

如果文件不是很大,試試這個:

awk 'NR==FNR{if($0~/matchWord/){for(i=NR-2;i<=NR+3;i++){if(i!=NR)a[i]++}}}\ 
NR>FNR{if(!(FNR in a))print $0}' file file 

我沒有測試,但應該工作。

+0

感謝肯特這是工作,但你知道如何使用sed做到這一點? – wael

2

首先,你不想在sed中這樣做。第二,你的問題是不適當的:如果你在第5和第8行有一場比賽,你會怎麼做?第8行被刪除,第6行被保留?假設這是不是一個問題,這似乎做你想要什麼:

 
#!/bin/sed -nf 

1{ h; d; } 
H 
2,5d 
g 
/^\([^\n]*\n\)\{2\}match/!P 
/^\([^\n]*\n\)\{2\}match/{ 
    s/\n[^\n]*$// 
    N 
} 
s/[^\n]*\n// 
h 
$p 

注:如果在最後3行文件時的比賽中,根據需要,這並不表現。這個案件是作爲(自虐)讀者的練習。

+0

我看到我誤解了你的問題(根據你的陳述,肯特的解決方案做了你想要的)。這會在比賽前刪除兩行中的一行,在比賽後刪除一行三行。你想刪除每場比賽總共6條線嗎?這實際上更容易。 –

相關問題