[unix] 필드의 섹션을 기준으로 파일을 정렬하는 방법

파일을 정렬하고 싶습니다 :

   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하여 key를 순서대로 정렬합니다 (그러나 행의 끝에서 끝나지만 10 진 숫자의 초기 순서 만 고려하는 숫자 정렬에는 문제가되지 않습니다).21b

이 두 줄 사이에 넥타이가 있으면 다음과 같이하십시오.

    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하나의 어휘 라인의 섹션에 (첫 번째 키 관계에) 정렬 할 그 첫 번째 필드는 선행 공백을 무시과 함께 시작됩니다.


답변