ファイルから重複した項目を削除するために使用しています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
重複行を削除しましたが、前の行と次の行を削除する方法はわかりません。
ベストアンサー1
あなたが本当に望むのは、<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>