sort 정렬 질문: ASCII와 숫자가 섞여 있을때 정렬하는 방법 문의

parkon의 이미지

안녕하세요,

유닉스의 sort 명령어에서 먼저 ASCII로 정렬하고 숫자가 나오면 그 땐 numeric으로 정렬하고 싶습니다.
예를 들어 제가 원하는 건 아래처럼 정렬이 되게 하고 싶은 건데요,

a_3.zip
a_10.zip
bcd_2.dat
bcd_10.dat

그냥 sort (혹은 sort -n)을 치면

a_10.zip
a_3.zip
bcd_10.dat
bcd_2.dat

이렇게 나오는 군요.

저기 저 숫자가 나오는 컬럼 위치가 일정하면 -k 스위치를 사용해서 원하는 바를 구현하는 건 아는데요,
위의 경우처럼 일반적인 경우에도 사용할 수 있는 방법이 있나요 ?

ymir의 이미지

ls 는 -v, sort 는 -V 가 natural sort 를 지원합니다.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

parkon의 이미지

와 되는군요, 감사합니다 ... ^^

chanik의 이미지

http://stackoverflow.com/a/6709427

컬럼 구분자를 언더스코어(_)로 설정하고,
두 컬럼을 아래와 같이 각각 키로 주면 되는 것 같네요.

$ cat data.txt
bcd_10.dat
a_10.zip
bcd_2.dat
a_3.zip
$ cat data.txt | sort -t_ -k1,1 -k2,2n -
a_3.zip
a_10.zip
bcd_2.dat
bcd_10.dat
parkon의 이미지

답변 감사합니다.
윗분의 -V 옵션이 제가 찾던 해이긴 하지만 말씀하신 방법도 도움이 많이 되는군요 ... ^^