sort
100%

Text-Fu · 레슨 12

sort

sort로 텍스트 줄을 사전식, 숫자 또는 선택한 필드 값에 따라 정렬하는 방법을 배웁니다.

sort 명령어는 완전한 줄을 읽고 선택한 비교 규칙에 따라 순서를 정한 뒤 결과를 표준 출력에 씁니다. 출력 작업을 명시적으로 선택하지 않는 한 입력 파일은 변경하지 않습니다.

전체 줄 정렬하기

animals.txt가 다음과 같다고 가정합니다.

dog
cow
cat
elephant
bird

줄을 오름차순으로 정렬합니다.

$ sort animals.txt
bird
cat
cow
dog
elephant

텍스트 순서는 현재 로캘을 따르며 대소문자, 악센트, 문장 부호의 순서에 영향을 줄 수 있습니다. 스크립트에서 재현 가능한 바이트 중심 배열이 필요하면 LC_ALL=C 같은 일관된 로캘을 사용합니다.

$ LC_ALL=C sort animals.txt

키나 숫자 옵션 없이 sort animals.txt를 실행하면 무엇을 하나요?

결과 뒤집기

비교 결과를 뒤집으려면 -r을 추가합니다.

$ sort -r animals.txt
elephant
dog
cow
cat
bird

animals.txt를 역순으로 정렬하는 명령어는 무엇인가요?

숫자 비교하기

사전식 순서는 문자를 비교하므로 일반적으로 102보다 앞에 옵니다. 보통의 숫자 비교에는 -n을 사용합니다.

$ printf '10\n2\n30\n' | sort -n
2
10
30

필요하면 옵션을 결합합니다. sort -nr scores.txt는 숫자로 비교하고 큰 값을 먼저 배치합니다.

scores.txt의 숫자 줄을 큰 값에서 작은 값 순으로 정렬하는 명령어는 무엇인가요?

필드를 기준으로 정렬하기

키를 선택하려면 -k START[,END]를 사용합니다. 기본적으로 연속된 공백이 필드를 구분합니다. 콜론 구분 레코드에는 -t ':'를 사용합니다.

$ printf 'alice:30\nbob:8\ncarol:20\n' | sort -t ':' -k 2,2n
bob:8
carol:20
alice:30

여기서 -t ':'는 구분 기호를 선택하고 -k 2,2는 키를 필드 2로 제한하며 붙어 있는 n은 그 키를 숫자로 비교합니다. 끝의 ,2가 없으면 필드 2에서 시작하는 키는 일반적으로 줄 끝까지 이어집니다.

users.txt에서 콜론으로 구분된 두 번째 필드만을 숫자로 정렬하는 명령어는 무엇인가요?

중복 제거하고 출력 저장하기

같은 비교 키마다 한 줄만 출력하려면 -u를 사용합니다.

$ sort -u names.txt

선택한 비교 규칙에 따라 정렬과 중복 제거를 함께 수행합니다. 이미 정렬된 데이터에서 인접 중복만 제거하려면 뒤에서 다룰 uniq 명령어를 사용할 수 있습니다.

대상이 입력과 다르면 일반 리디렉션으로 결과를 파일에 쓸 수 있습니다.

$ sort names.txt > names-sorted.txt

sort names.txt > names.txt를 실행하지 마세요. 쉘은 sort가 읽기 전에 입력 파일을 비웁니다. 같은 경로를 의도적으로 사용하려면 GNU sort -o names.txt names.txt가 자체 출력을 안전하게 처리합니다.

$ sort -o names.txt names.txt

원본 데이터가 중요하면 백업을 만들거나 별도의 결과를 쓰고 확인하세요.

GNU/Linux에서 쉘 리디렉션이 먼저 파일을 비우지 않도록 sort에 정렬 결과를 names.txt에 안전하게 다시 쓰라고 요청하는 명령어는 무엇인가요?

줄 단위 데이터의 정렬과 분석을 연습하려면 다음 실습을 진행해 보세요.

  1. Linux sort 명령어: 텍스트 정렬 - 오름차순과 내림차순을 포함해 텍스트 파일의 줄을 여러 방식으로 정렬합니다.
  2. 단어 수 세기와 정렬 - 단어 수 세기와 정렬을 함께 적용해 텍스트 데이터를 분석합니다.

레슨 완료

sort 완료

이제 정렬된 텍스트의 비교 규칙과 출력 대상을 선택할 수 있습니다.

  • 재현성이 중요할 때 명시적인 로캘로 전체 줄을 정렬할 수 있습니다.

  • -r로 결과를 뒤집을 수 있습니다.

  • -n으로 숫자 값을 비교할 수 있습니다.

  • -t-k로 범위가 제한된 필드 키를 선택할 수 있습니다.

  • 입력을 비우지 않고 중복을 제거하거나 출력을 저장할 수 있습니다.

학습 진행 상황 저장

무료 계정을 만들어 이 레슨을 저장하고 어떤 기기에서든 계속 학습하세요.

무료 계정 만들기
다음 수업
Text-Fu(으)로 돌아가기