중복된 단락을 제거하는 방법

중복된 단락을 제거하는 방법

단락(빈 줄로 구분된 줄 그룹)을 포함하는 파일이 제공됩니다. 동등한 단락 내에서 줄 바꿈을 유지해야 합니다. 중복된 단락을 제거 하는 방법이 있나요 uniq?

각 단락을 한 줄로 직렬화하고 uniq결과를 실행하고 역직렬화할 수 있을 것 같습니다. 더 나은 솔루션이 있습니까?

입력하다:

Paragraph1
continue
continue

...

Paragraph2
continue
continue

...

Paragraph1
continue
continue

...

Paragraph2
continue
continue

원하는 출력: 단락1과 단락2가 하나만 있습니다.

명령줄 솔루션이 더 좋습니다.

답변1

문서를 보면 awk다음을 사용할 수 있는 것 같습니다.

cat file.txt | awk 'BEGIN { RS = "\n\n+"; first = 1 } {if (!x[$0]++) { if (!first) {print ""}; print $0; first = 0} }'

빠른 설명:

  • 단락을 구분하기 위해 레코드 구분 기호를 RS"\n\n+"로 설정했습니다.
  • 이 변수는 first레코드 사이에 개행을 인쇄하는 데 사용됩니다. 또는 각 $0 다음에 개행을 인쇄할 수 있지만 마지막 레코드의 개행을 제거할 방법이 없습니다.
  • 지도는 x이전에 기록을 본 적이 있는지 계산하는 데 사용됩니다. 본 적이 없는 경우에만 기록을 인쇄합니다.
  • records 가 아닌 경우 first레코드 사이에 줄바꿈을 인쇄합니다.
  • 기록을 인쇄합니다.
  • 거짓으로 설정하세요 first.

답변2

$ awk -v RS= -v ORS='\n\n' '!seen[$0]++' file
Paragraph1
continue
continue

...

Paragraph2
continue
continue

관련 정보