2021년 8월 31일 화요일

'sort -g'의 힘

보통의 숫자와 지수형으로 표현된 숫자가 혼재하는 파일을 정렬하고자 한다. sort -n으로는 잘 되지 않는다. 이러한 경우에 sort -g 명령을 쓰면 된다. 다음의 사례를 보자.

$ cat numbers
0.002
1E-4
0.003
1
3
10
2E-4
3E+2
$ sort -n numbers
0.002
0.003
1
1E-4
2E-4
3
3E+2
10
$ sort -g numbers
1E-4
2E-4
0.002
0.003
1
3
10
3E+2

만약 역순으로 나타나게 하려면 'sort -gr'이라고 명령을 내리면 될 것이다. 매뉴얼에 의하면 '-g'는 일반적인 숫자 값에 따라 비교를 하며, '-b' 옵션을 내포한다고 하였다. '-b' 옵션은 앞부분의 공백을 무시하는 기능을 한다.

bash 환경에서 awk와 같은 '고급' 언어를 쓰지 않아도 sort나 join 등으로 꽤 많은 일을 할 수 있다. cut과 paste도 그러하다. 위에서 다룬 numbers 파일의 숫자를 콤마로 이어붙이는 문자열을 만들어 보자.

$ VAR=$(paste -sd, numbers)
$ echo $VAR
0.002.1E-4.0.003.1.3.10.2E-4.3E+2
$ VAR=$(paste -sd, <(sort -g numbers))
$ echo $VAR
1E-4,2E-4,0.002,0.003,1,3,10,3E+2

여기에서 보였듯이 process substitution을 사용하여 정렬한 숫자를 paste 명령으로 보낼 수 있다. 저수준 유틸리티를 잘 알고 있으면 간단한 자료 파일을 다루기에 아주 편리하다.


댓글 없음: