Shell-Script
滿足特定條件時如何使用 awk 刪除一組行
我
awk
用來刪除文件中的重複項,問題是如果找到重複項,我想刪除一組行,例如-<p> This is duplicate. </p> <p> This is original. </p> <p> This is duplicate. </p>
我想把它改成——
<p> This is duplicate. </p> <p> This is original. </p>
當一行重複時,刪除上一行和下一行,我們將不勝感激。
我目前正在使用-
awk -i inplace '!seen[$0]++' name_of_file
刪除重複的行,但我無法弄清楚如何刪除上一行和下一行。
我認為您真正想要做的是刪除重複
<p>...</p>
的分隔記錄而不是單獨的行。鑑於您發布的範例,GNU awk 就是這樣(您已經將其-i inplace)
用於多字元 RS:$ awk 'BEGIN{RS=ORS="</p>\n"} !seen[$0]++' file <p> This is duplicate. </p> <p> This is original. </p>
請注意,無論
<p>...</p>
記錄中有多少行,這都有效,例如,給定此輸入,其中重複記錄是多行:$ cat file <p> This is duplicate. </p> <p> This is original. </p> <p> This is duplicate. </p>
該腳本仍會刪除重複項:
$ awk 'BEGIN{RS=ORS="</p>\n"} !seen[$0]++' file <p> This is duplicate. </p> <p> This is original. </p>