Bash에서 중복 줄 제거
중복 항목은 Bash 스크립트에서 부정확하거나 일관성 없는 결과와 같은 다양한 문제를 일으킬 수 있으며 스크립트를 유지 관리하기 어렵게 만들 수도 있습니다. 이러한 문제를 피하기 위해 스크립트에서 중복 항목을 제거하는 것이 종종 필요하며 Bash에서 이를 수행하는 방법은 다양합니다.
sort
및 uniq
를 사용하여 Bash에서 중복 라인 제거
Bash 스크립트에서 중복 항목을 제거하는 한 가지 방법은 sort
및 uniq
명령을 사용하는 것입니다. sort
명령은 지정된 순서로 입력 데이터를 정렬하고 uniq
명령은 정렬된 데이터에서 중복 행을 필터링합니다.
data.txt
파일에는 이 문서의 예제에 대한 아래 내용이 포함되어 있습니다.
arg1
arg2
arg3
arg2
arg2
arg1
위 파일에서 중복 항목을 제거하려면 다음 명령을 사용할 수 있습니다.
sort data.txt | uniq > data-unique.txt
출력(touch data-unique.txt
):
arg1
arg2
arg3
이 명령은 data.txt
파일을 오름차순(기본값)으로 정렬하고 출력을 uniq
명령으로 파이프합니다. uniq
명령은 정렬된 데이터에서 중복 행을 필터링하고 그 결과를 data-unique.txt
라는 새 파일에 기록합니다.
이렇게 하면 data.txt
파일에서 모든 중복 항목이 제거되고 고유한 항목이 있는 새 파일이 생성됩니다.
uniq
명령에는 중복 행만 인쇄하는 -d
옵션 또는 각 행이 나타나는 횟수를 인쇄하는 -c
옵션과 같이 동작을 제어하는 데 사용할 수 있는 여러 옵션이 있습니다. 입력에서. 예를 들어 data.txt
파일에 각 줄이 나타나는 횟수를 인쇄하려면 다음 명령을 사용할 수 있습니다.
sort data.txt | uniq -c
이 명령은 이전 명령과 유사하지만 uniq
명령에 -c
옵션을 추가합니다. 이렇게 하면 각 줄이 입력에 나타나는 횟수와 줄 자체가 인쇄됩니다.
예를 들어 결과는 다음과 같을 수 있습니다.
2 arg1
3 arg2
1 arg3
이 출력은 Line 1이 나타나는 것을 보여줍니다.
awk
명령을 사용하여 Bash에서 중복 행 제거
Bash 스크립트에서 중복 항목을 제거하는 또 다른 접근 방식은 텍스트 파일에서 수많은 작업을 실행할 수 있는 강력한 텍스트 처리 도구인 awk
명령을 사용하는 것입니다. awk
명령에는 입력에서 각 라인의 발생을 저장하고 계산할 수 있는 내장 연관 배열 데이터 구조가 있습니다.
예를 들어 이전과 동일한 파일에서 중복 항목을 제거하려면 다음 명령을 사용할 수 있습니다.
awk '!a[$0]++' data.txt > data-unique.txt
출력:
arg1
arg2
arg3
이 명령은 awk
명령을 사용하여 data.txt
파일을 읽고 각 입력 라인에 간단한 조건을 적용합니다. 이 조건은 !a[$0]++
표현식을 사용하며, 각 행을 읽을 때 a
배열의 값을 증가시킵니다.
이는 각 라인이 입력에 나타나는 횟수를 효과적으로 세고 a
배열에 카운트를 저장합니다.
awk
명령은 !
를 적용합니다. 배열 요소의 값을 부정하는 a[$0]
표현식에 대한 연산자. 이는 a
배열에서 카운트가 0인 행만 조건을 통과하고 출력에 인쇄됨을 의미합니다. 그런 다음 출력은 data.txt
파일의 고유한 항목을 포함하는 data-unique.txt
라는 새 파일로 리디렉션됩니다.
awk
명령은 동작을 제어하고 출력을 사용자 지정하는 데 사용할 수 있는 여러 옵션과 기능도 제공합니다. 예를 들어 -F
옵션을 사용하여 다른 필드 구분 기호를 지정하거나 -v
옵션을 사용하여 스크립트에서 변수를 정의할 수 있습니다.
또한 printf
기능을 사용하여 다양한 방법으로 awk
명령의 출력 형식을 지정할 수 있습니다.
sort
및 uniq
명령은 중복 항목을 제거하기 위한 간단하고 효율적인 도구이며 awk
명령은 스크립트의 출력 및 동작을 사용자 정의하기 위한 고급 기능과 옵션을 제공합니다.
Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.
LinkedIn