파일에서 중복된 인접 줄 제거

파일에서 중복된 인접 줄 제거

다음과 같은 파일이 있다고 가정해 보겠습니다.

foo1
bar
foo2
foo2
bar
bar
bar
foo3

나는 그것을 다음과 같이 줄이고 싶습니다 :

foo1
bar
foo2
bar
foo3

기본적으로 인접한 경우에만 중복 항목을 제거합니다... bash 함수를 작성하기 시작했지만 이를 수행하는 방법을 모른다는 것을 깨달았습니다.

remove_duplicate_adjacent_lines(){
   prev='';
   while read line; do
     if test "$line" != "$prev"; then
        prev="$line";
        echo "$line"
     fi
   done;
}

그러나 문제는 prevwhile 루프의 범위를 벗어납니다. bash를 사용하여 이 작업을 수행할 수 있는 방법이 있습니까?

답변1

이것이 바로 이 uniq유틸리티의 용도입니다.

$ uniq <File
foo1
bar
foo2
bar
foo3

bash 기록이 좋은 예입니다.

history | uniq

위의 코드는 줄 번호 때문에 작동하지 않지만 다음과 같이 작동합니다.

cat ~/.bash_history | uniq

중복된 인접 명령이 제거됩니다.

에서 man uniq:

필터인접한 일치 선INPUT(또는 표준 입력)에서 OUTPUT(또는 표준 출력)을 씁니다. 옵션이 없으면 일치하는 줄이 첫 번째 항목으로 병합됩니다. [강조 추가]

관련 정보