다음과 같은 파일이 있다고 가정해 보겠습니다.
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;
}
그러나 문제는 prev
while 루프의 범위를 벗어납니다. bash를 사용하여 이 작업을 수행할 수 있는 방법이 있습니까?
답변1
이것이 바로 이 uniq
유틸리티의 용도입니다.
$ uniq <File
foo1
bar
foo2
bar
foo3
bash 기록이 좋은 예입니다.
history | uniq
위의 코드는 줄 번호 때문에 작동하지 않지만 다음과 같이 작동합니다.
cat ~/.bash_history | uniq
중복된 인접 명령이 제거됩니다.
에서 man uniq
:
필터인접한 일치 선INPUT(또는 표준 입력)에서 OUTPUT(또는 표준 출력)을 씁니다. 옵션이 없으면 일치하는 줄이 첫 번째 항목으로 병합됩니다. [강조 추가]