파일을 정렬하고 싶습니다 :
D104HN-D104HA 8.320 4.521 1.69e+05 --
D104HN-D104HB* 8.320 2.823 2.93e+05 --
A90HB#-A90HA 1.655 4.207 7.12e+05 --
A90HB#-F91HA 1.653 4.411 8.59e+04 --
A114HB#-A114HA 1.253 4.098 7.67e+05 --
A114HB#-R111HA 1.251 3.929 1.76e+05 --
A114HB#-W110HA 1.253 4.451 3.68e+04 --
F91HE*-F91HZ 7.237 7.122 7.85e+05 --
F91HE*-K92HA 7.242 3.910 4.88e+04 --
그리고 이것을 얻으십시오
A90HB#-A90HA 1.655 4.207 7.12e+05 --
A90HB#-F91HA 1.653 4.411 8.59e+04 --
F91HE*-F91HZ 7.237 7.122 7.85e+05 --
F91HE*-K92HA 7.242 3.910 4.88e+04 --
D104HN-D104HA 8.320 4.521 1.69e+05 --
D104HN-D104HB* 8.320 2.823 2.93e+05 --
A114HB#-A114HA 1.253 4.098 7.67e+05 --
A114HB#-R111HA 1.251 3.929 1.76e+05 --
A114HB#-W110HA 1.253 4.451 3.68e+04 --
즉, 행에서 비 공백의 첫 번째 시퀀스의 두 번째 및 다음 문자에서 숫자로 정렬하십시오.
답변
sort -k 1.2bn < file
선행 란크를 무시하고 행의 끝에서 끝나는 st 필드 의 nd 문자로 시작 n
하여 k
ey를 순서대로 정렬합니다 (그러나 행의 끝에서 끝나지만 10 진 숫자의 초기 순서 만 고려하는 숫자 정렬에는 문제가되지 않습니다).2
1
b
이 두 줄 사이에 넥타이가 있으면 다음과 같이하십시오.
F91HE*-K92HA 7.242 3.910 4.88e+04 --
F91HE*-F91HZ 7.237 7.122 7.85e+05 --
그런 다음 순서는 두 줄을 문자열로 완전히 비교하는 마지막 리조트 정렬을 기반으로합니다.
일부 로케일의 경우 문자열을 비교하기 위해 공백이 먼저 무시됩니다.이 경우 F91은 K92 F
이전에 정렬됩니다 (이전 정렬 K
). C 로케일과 같은 다른 것들과 함께 공백은 무시되지 않으며 K92는 F91보다 먼저 나타납니다 (앞 공백 정렬 F
).
로케일에 관계없이 선행 공백을 무시하는 마지막 리조트 정렬의 경우 다음을 수행 할 수 있습니다.
sort -k 1.2bn -k 1b < file
그건 1b
하나의 어휘 라인의 섹션에 (첫 번째 키 관계에) 정렬 할 그 첫 번째 필드는 선행 공백을 무시과 함께 시작됩니다.