숫자, 문자, 구두점이 혼합된 열을 기준으로 파일을 정렬하는 방법은 무엇입니까?

숫자, 문자, 구두점이 혼합된 열을 기준으로 파일을 정렬하는 방법은 무엇입니까?

다음 형식의 텍스트 파일이 있습니다.

b   SN:2
d   SN:5
f   SN:10
g   SN:11
h   SN:15
i   SA:3
j   SN:1
k   SN:4

두 번째 열, 실제로는 두 번째 열의 숫자 값을 기준으로 정렬하고 싶습니다. 나는 노력했다 -

$ sort -n -k2,2 file
$ sort -k2.4,2.5n file

하지만 아무것도 작동하지 않는 것 같습니다.

답변1

옵션을 사용하지 않기 때문에 -t( -b또는GNU 정렬), 따라서 계산은 선행 공백의 시작 부분부터 시작되어야 합니다. POSIX 정의sort -k 확장 설명처럼:

A field comprises a maximal sequence of non-separating characters and, in 
the absence of option -t, any preceding field separator

따라서 다음을 사용해야 합니다.

$ sort -nk2.7 file
j   SN:1
b   SN:2
i   SA:3
k   SN:4
d   SN:5
f   SN:10
g   SN:11
h   SN:15

그러나 이를 필드 구분 기호로 사용한 :다음 두 번째 필드를 기준으로 숫자를 정렬할 수 있습니다.

$ sort -t':' -nk2 file
j   SN:1
b   SN:2
i   SA:3
k   SN:4
d   SN:5
f   SN:10
g   SN:11
h   SN:15

답변2

그냥 네 상황에 맞춰man sort

-t와 -b가 모두 유효하지 않은 경우 필드의 문자 수를 계산합니다. 앞의 공백부터 시작.

그래서

sort -k2.7n file

일을 할 수 있다

힌트!

행부터 계산을 시작하려면 -t존재하지 않는 문자 허용을 사용하여 행을 필드로 처리할 수 있습니다.

sort -t% -k1.8n file

관련 정보