両方のファイルで重複した段落を見つけて削除

両方のファイルで重複した段落を見つけて削除

2つのあご受けファイルがあります。一部の項目は重複しており、重複した項目は段落にあるか、同じパターンで識別できます。

a.bib良い

@InProceedings{Arranged,
  author = {Transcribed by hofei Arranged and by hofei},
  title  = {ALL OF ME},
  file   = {:All of Me.pdf:PDF},
  groups = {Solo Tab},
}

@InProceedings{P,
  author = {P and = and V V and V V},
  title  = {ANGELS WE HAVE HEARD ON HIGH Transcribed by hofei},
  file   = {:Angels We Have Heard on High.pdf:PDF},
  groups = {Solo Tab},
}

そしてb.bib

@InProceedings{Arranged,
  author = {Transcribed by hofei Arranged and by hofei},
  title  = {ALL OF ME},
  file   = {:All of Me.pdf:PDF},
  groups = {Solo Tab},
}

@InProceedings{,
  title  = {This Is My Father's World Standard Tuning Traditional Fast Tempo - “Thumbpicking” Style Arrangement by Mark Hanson},
  year   = {2005},
  file   = {:MyFathersWorld_p2.pdf:PDF},
  groups = {Solo Tab},
}

私は知っている両方のファイルに重複した段落を表示するはい

$ awk -v RS=""  '{gsub(/\n/," "); print}' a.bib b.bib | sort | uniq -c | grep -vE '^\s*1 '
      2 @InProceedings{Arranged,   author = {Transcribed by hofei Arranged and by hofei},   title  = {ALL OF ME},   file   = {:All of Me.pdf:PDF},   groups = {Solo Tab}, }

しかし、重複した項目を自動的に削除する方法はb.bib

答え1

行があったように、今段落がありました。 2つのファイルを解析し、最初のファイルの段落をハッシュに入れ、次に2番目のファイルが存在しない場合にのみ2番目の段落を印刷します。

awk -v RS="" -v ORS="\n\n" 'FNR==NR{a[$0]; next} !($0 in a)' a.bib b.bib

出力:

@InProceedings{,
  title  = {This Is My Father's World Standard Tuning Traditional Fast Tempo - “Thumbpicking” Style Arrangement by Mark Hanson},
  year   = {2005},
  file   = {:MyFathersWorld_p2.pdf:PDF},
  groups = {Solo Tab},
}

空白文字があると重複した内容が失われる可能性がありますのでご注意ください。diff結果を確認するためにいくつかを一緒に実行したい場合があります。

関連情報