두 파일에서 중복된 단락을 찾아 하나 삭제

두 파일에서 중복된 단락을 찾아 하나 삭제

두 개의 턱받이 파일이 있습니다. 일부 항목은 중복되고, 중복된 항목은 단락에 있거나 동일한 패턴으로 식별될 수 있습니다.

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

줄이 있었던 것처럼 이제 단락이 생겼습니다. 두 파일을 구문 분석하고 첫 번째 파일의 단락을 해시에 넣은 다음 두 번째 파일이 존재하지 않는 경우에만 두 번째 단락을 인쇄합니다.

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결과를 확인하기 위해 일부를 함께 실행하고 싶을 수도 있습니다 .

관련 정보