연속해서 반복되는 두 줄 찾기

연속해서 반복되는 두 줄 찾기

파일에서 두 개의 연결된 중복 줄을 찾는 방법은 무엇입니까?

예를 들어, 이 파일에는 두 개의 연결된 반복 줄만 있습니다.

 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
 OQ-63/ECC/Global/MES/54/ECC-MRP-S05
 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
 OQ-63/ECC/Global/MES/54/ECC-MRP-S05.ear
 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter <--
 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter <--
 OQ-63/ECC/Global/MES/54/ECC-MRP-S05.xml

답변1

Uniq이면 충분합니다.

$ cat c.txt
 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
 OQ-63/ECC/Global/MES/54/ECC-MRP-S05
 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
 OQ-63/ECC/Global/MES/54/ECC-MRP-S05.ear
 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
 OQ-63/ECC/Global/MES/54/ECC-MRP-S05.xml

$ uniq -D c.txt
 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter

$ uniq c.txt
 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
 OQ-63/ECC/Global/MES/54/ECC-MRP-S05
 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
 OQ-63/ECC/Global/MES/54/ECC-MRP-S05.ear
 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
 OQ-63/ECC/Global/MES/54/ECC-MRP-S05.xml

기본적으로 uniq는 입력 파일의 인접한 행을 확인합니다. 따라서 정렬되지 않은 파일의 경우(예: 귀하의 경우) uniq는 원하는 작업을 수행합니다.

uniq -d 및 -u 옵션에도 관심이 있을 수 있습니다. 자세한 내용은 매뉴얼 페이지를 참조하십시오(-d는 두 개의 중복 행 중 하나만 인쇄하고 -u는 uniq 행만 인쇄 - 두 중복 항목을 모두 제거합니다).

답변2

또 다른 옵션:

grep -zPo '\n(.+)\n\1\n'

이렇게 하면 추가 조정 사항(예: 추가 공간 허용 등)을 추가할 수 있습니다.

업그레이드: @thor가 지적했듯이 파일 시작 부분에서 중복을 포착하지 않습니다. 이 상황을 해결하려면 다음을 사용하십시오.

grep -zPo '(?<!.)(.+\n)\1' 

답변3

AWK의 또 다른 대안:

awk 'x !~ $0; {x=$0}'

이렇게 하면 uniq와 동일한 동작을 얻을 수 있지만 열 단위로도 마찬가지입니다.

awk -F/ 'x !~ $2; {x=$2}'

-F필드 구분자를 설정합니다.

이렇게 하면 두 번째 필드가 이전 행의 두 번째 필드와 연속적으로 동일한 행을 삭제할 수 있습니다.

$ cat c.txt
 line/one
 line/two
 otherline/two
 yetanotherline/two
 line/three

$ awk -F/ 'x !~ $2; {x=$2}' c.txt
 line/one
 line/two
 line/three

관련 정보