반달가면 이글루에서 백업 - http://bahndal.egloos.com/538266
sort 명령에 별다른 옵션을 주지 않으면 행 전체를 기준으로 정렬하게 되는데, 옵션을 추가해서 특정 항목을 기준으로 정렬을 할 수 있다.
아래의 예시를 보자.
# my_list.txt 내용 확인
cat my_list.txt
strawberry 46
mango 134
apple 33
# my_list.txt 내용 정렬
cat my_list.txt | sort
apple 33
mango 134
strawberry 46
아무런 옵션을 주지 않으면 행 전체를 문자열로 간주하고 정렬한다. 따라서 my_list.txt에서 a로 시작되는 행이 가장 먼저 출력되고 이후 알파벳 순으로 정렬되었다.
위의 예시에서 두번째 항목에 있는 수자를 기준으로 가장 큰 수부터 출력되도록 정렬하려면, 몇가지 옵션을 추가해 주어야 한다.
# 2번째 항목 기준(-k 2), 수자로 간주하여 정렬(-g), 제일 큰 수부터(-r)
cat my_list.txt | sort -k 2 -g -r
mango 134
strawberry 46
apple 33
-k 옵션으로 정렬 기준이 되는 항목을 지정한다. 항목 구분은 공백(space) 또는 탭(tab)이다. 위의 예시처럼 -k 2 이렇게 옵션을 주면 2번째 항목을 기준으로 잡게 된다. 그 외에 해당 항목을 문자열이 아니라 수자로 간주하기 위해 -g 옵션을, 정렬 순서를 바꾸기 위해 -r 옵션을 추가했다. (-g, -r 옵션에 대한 내용은 이전 게시물을 참고하자. 여기로)
항목 구분자(field separator)가 문자일 경우엔 어떻게 할까? 아래의 예시를 보자.
cat my_list2.txt
strawberry:46
mango:134
apple:33
my_list2.txt 파일은 구분자가 콜론(:)이다. 이 경우엔 정렬을 할 때 -t 옵션으로 구분자를 지정해 주면 된다.
# 콜론을 구분자로 사용(-t ":")
cat my_list2.txt | sort -t ":" -k 2 -g -r
mango:134
strawberry:46
apple:33
'bash script' 카테고리의 다른 글
[bash: find, awk] 특정 디렉토리에 있는 특정 파일들의 용량 합계 구하기 (0) | 2023.04.11 |
---|---|
[bash: <<. >] FTP 자동접속 및 전송 결과 확인 (0) | 2023.04.11 |
[bash: function] 함수를 이용한 동시 작업(백그라운드 실행) (0) | 2023.04.07 |
[bash: find] 파일/디렉토리 검색 속도 향상을 위한 색인(index) 만들기 (0) | 2023.04.07 |
[bash: printf] 형식을 지정해서 출력하기 (0) | 2023.04.07 |