다음 줄이 같은 경우 줄 삭제


15

어떤 sed / awk 명령을 사용할 수 있습니까? 그냥 sort -u모든 인스턴스를 제거합니다

입력:

abc
abc
def
abc
abc
def

예상 출력 :

abc
def
abc
def

답변:


36

이것이 uniq표준 명령입니다.

uniq your-file

참고 어떤 것을 uniqGNU와 같은 구현이 uniq당신에게 라인의 순서의 첫 번째 줄 것이다 종류의 같은 (여기서 strcoll()반대로 0을 반환) 이다 바이트로 바이트와 동일 ( memcmp()또는 strcmp()0을 반환). uniq구현에 관계없이 바이트 대 바이트 비교 를 강제하기 위해 로케일을 다음 C과 같이 강제 설정할 수 있습니다 .

LC_ALL=C uniq your-file

7

Vim은 이것을 훌륭하게 달성 할 수 있습니다.

:g/\v^(.*\n)\1/d

또는 vim을 명령 줄 도구로 사용하려면 다음과 같이하십시오.

vim file -c "g/\v^(.*\n)\1/d" -c "wq"

이 방법으로 나중에 vim을 종료하면서 씨름 할 필요가 없습니다.)

설명:

:g/

이 정규식과 일치하는 모든 줄에서 ...

\v^(.*\n)\1

모든 줄 다음에 ...

/d

d elete 명령을 실행하십시오 (현재 행을 삭제하십시오). 는 -c "wq"변경 내용을 저장하고 종료하는 것입니다.


vim 8.1.2112 이상에서는 파일의 마지막 두 줄인 중복 ​​된 줄에는 작동하지 않습니다. 또한 3 개의 중복 행 시퀀스에서 하나의 복제본 만 제거합니다.
Stéphane Chazelas

1
@ StéphaneChazelas를 제외하고는 현재 3 줄의 경우 원하는 동작에 대한 사양이 부족합니다. 원하는 동작을 두 가지 방식으로 모두 볼 수있었습니다.
D. Ben Knoble
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.