2013-03-15 79 views
1

我有一個txt文件是這樣的:如果第一行包含一些文本,如何刪除行中的三行? (AWK)

# RIR1 
ABABABABABABABABAA 
ABABABABABABABABBA 
# WR 
ABABABABABABABABAB 
BABABBABABABABABAA 
# BR2 
ABABABABABABABBABA 
ABBABABABABABABABA 
# SL 
AAABABABABABABBABA 
AAABBABABABABABABA 

我想刪除所有對於SL和WR(爲例)的數據。所以我將只有:

# RIR1 
ABABABABABABABABAA 
ABABABABABABABABBA 
# BR2 
ABABABABABABABBABA 
ABBABABABABABABABA 

我知道如何刪除一行開始或包含的東西,但不知道如何處理3行的行。

這是我用它來刪除包含一些行:

awk ' $2 !~ /SL/ && $2 !~ /WR/ ' test.txt > test_new.txt 

我想知道是否有一種方法將所有三行刪除在一起。

回答

3

使用打印標誌(由dogbane啓發)純awk溶液:

$ awk '/^#/{p=1}/^# (SL|WR)/,/^#/{p=0}p' file 
# RIR1 
ABABABABABABABABAA 
ABABABABABABABABBA 
# BR2 
ABABABABABABABBABA 
ABBABABABABABABABA 

說明:

/^#/ {p=1}如果行開頭設置打印標記一個#p1

/^# (SL|WR)/,/^#/{p=0}如果該行在# SL# WR開始的範圍內開始#下一行設置打印標誌0

p如果打印標記爲非零的缺省塊運行{print}其他0並打印什麼。

訂單在這裏很重要,首先打印標誌在每個新記錄中打開,並且只關閉記錄SLWR


使用record seperators

你可以重新定義一個record就是與awk通過設置RS變量。默認情況下,每一個記錄是由一個換行符但對於可以使用#作爲記錄分隔符,只有第一場打印的記錄在您的例子分離不WRSL

$ awk '$1 != "SL" && $1 != "WR"' RS=# ORS=# file 
# RIR1 
ABABABABABABABABAA 
ABABABABABABABABBA 
# BR2 
ABABABABABABABBABA 
ABBABABABABABABABA 
# 

一個小問題與此方法是最後一個記錄分隔符。一個簡單的解決將是管sed '$d'

$ awk '$1 != "SL" && $1 != "WR"' RS=# ORS=# file | sed '$d' 
# RIR1 
ABABABABABABABABAA 
ABABABABABABABABBA 
# BR2 
ABABABABABABABBABA 
ABBABABABABABABABA 

注:變量ORS是輸出記錄分隔符,我們需要設置使#顯示輸出。

+0

這將在最後一個換行符後打印一個額外的''#.. – Scrutinizer 2013-03-15 11:01:51

+0

@Scrutinizer好點的,簡單的解決增加。 – 2013-03-15 11:12:14

+0

只是爲了確保'RS'定義了行的乞求和'ORS'的結束? – mahmood 2013-03-15 11:17:50

0

預處理文件:

awk '/#/{print x}1' file | awk '$2!="SL" && $2 !="WR"' RS= 
3

使用sed

要刪除# WR

sed -e '/^# WR/,/^#/ {/^# WR/d;/^#/!d}' file 

要同時刪除# WR# SL塊:

$ sed -e '/^# WR/,/^#/ {/^# WR/d;/^#/!d}' -e '/^# SL/,/^#/ {/^# SL/d;/^#/!d}' file 

# RIR1 
ABABABABABABABABAA 
ABABABABABABABABBA 
# BR2 
ABABABABABABABBABA 
ABBABABABABABABABA 

或者,正如所建議的sudo_O:

sed -r '/^# (WR|SL)/,/^#/ {/^# (WR|SL)/d;/^#/!d}' file 
+0

+1!你可以在這裏使用像sed -r'/ ^#(WR | SL)/,/ ^#/ {/ ^#(WR | SL)/ d;/^#/!d}'這樣的變化,特別是如果記錄數大於2! – 2013-03-15 11:36:41

+0

更新,謝謝 – dogbane 2013-03-15 12:00:01

相關問題