Natural order numerical sorting

Computing 2009. 7. 27. 19:19

가끔 이런 필요가 생긴다 :

아래와 같은 입력이 있을 때 이것을 순서대로 정리하고 싶은 경우.

File.1.txt
File.10.txt
File.11.txt
File.12.txt
File.13.txt
File.14.txt
File.15.txt
File.16.txt
File.17.txt
File.18.txt
File.19.txt
File.2.txt
File.20.txt
File.3.txt
File.4.txt
File.5.txt
File.6.txt
File.7.txt
File.8.txt
File.9.txt

sort 를 사용하면....

$ ls -1 | sort
File.1.txt
File.10.txt
File.11.txt
File.12.txt
File.13.txt
File.14.txt
File.15.txt
File.16.txt
File.17.txt
File.18.txt
File.19.txt
File.2.txt
File.20.txt
File.3.txt
File.4.txt
File.5.txt
File.6.txt
File.7.txt
File.8.txt
File.9.txt

우웩...;;; 원하는 결과가 안나온다. 그래서 sort 에 numerical order 를 따르라고 -n 옵션을 줘 봐도 잘 안된다.

그러나 gnu ls 를 쓴다면, --sort=version 옵션을 주면 된다. 서모님이 검색해 준 팁.

$ ls --sort=version -1
File.1.txt
File.2.txt
File.3.txt
File.4.txt
File.5.txt
File.6.txt
File.7.txt
File.8.txt
File.9.txt
File.10.txt
File.11.txt
File.12.txt
File.13.txt
File.14.txt
File.15.txt
File.16.txt
File.17.txt
File.18.txt
File.19.txt
File.20.txt

2011년 4월 11일 추가: --sort=version 을 타이핑하기가 귀찮으니 그냥 -v 를 주면 된다 : ls -v -1

굳이 sort 를 이용하려면, 몇가지 옵션을 추가해 주어야 한다 :

$ ls -1 | sort -n -t'.' -k2
File.1.txt
File.2.txt
File.3.txt
File.4.txt
File.5.txt
File.6.txt
File.7.txt
File.8.txt
File.9.txt
File.10.txt
File.11.txt
File.12.txt
File.13.txt
File.14.txt
File.15.txt
File.16.txt
File.17.txt
File.18.txt
File.19.txt
File.20.txt

옵션들의 의미는 man 페이지를 찾아 보도록.


: