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