bash script2023. 4. 7. 17:38

 

반달가면 이글루에서 백업 - 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

728x90
Posted by 반달가면