示例文本:SED,AWK或類似 - 刪除整條生產線和2行以上,如果模式匹配之後是一個空行
heading1
heading2
data
data
data
heading1
heading2
heading1
heading2
data
data
data
我要刪除中間不具有任何數據段。那是;如果標題2後跟一個空行,則刪除標題2,標題1和上面的空白行。
我發現如何刪除行後只有一個空行,以及如何刪除模式上方/下方的n行,但不能解決如何合併這兩個。
謝謝。
示例文本:SED,AWK或類似 - 刪除整條生產線和2行以上,如果模式匹配之後是一個空行
heading1
heading2
data
data
data
heading1
heading2
heading1
heading2
data
data
data
我要刪除中間不具有任何數據段。那是;如果標題2後跟一個空行,則刪除標題2,標題1和上面的空白行。
我發現如何刪除行後只有一個空行,以及如何刪除模式上方/下方的n行,但不能解決如何合併這兩個。
謝謝。
您可以使用awk
:
awk 'BEGIN{RS=ORS="\n\n";FS="\n"} NF>2' input.file
雖然awk
默認情況下在每行的基礎上運行,記錄不一定需要是一個單一的線。使用RS
(輸入記錄分隔符),您可以定義如何分隔記錄。
我在BEGIN
塊設置RS
一個空行的段落分開記錄和FS
爲換行符一個新行分離領域。
NF
保留數是當前記錄中的字段數。 NF>2
檢查包含多於2行的任何記錄 - 如果滿足此條件,則awk
將打印該記錄。
ORS
是輸出記錄分隔符。我將它設置爲空行,作爲FS
,以便將輸出中的單個記錄分開。
這可能會爲你工作(GNU SED):
sed ':a;N;/^$/M!ba;s/\n/&/3;t;d' file
存儲記錄由一個空行分隔,在模式空間。如果記錄包含3個或更多換行符,則打印它,否則將其刪除。
好的,這似乎工作。謝謝。我會在週一更徹底地測試它(這是家庭時間,這是與工作有關的)。你能解釋一下每個部件的功能嗎? – Darren
@Inian什麼不清楚? – hek2mgl
@ hek2mgl:現在試着想出一個主意,'++'爲了創新! – Inian