필드의 일부를 기준으로 파일을 정렬하는 방법

필드의 일부를 기준으로 파일을 정렬하는 방법

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

   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 -- 

즉, 행에서 공백이 아닌 첫 번째 시퀀스의 두 번째 및 후속 문자를 숫자로 정렬합니다.

답변1

sort -k 1.2bn < file

nst 필드 의 두 번째k 문자에서 시작하여 선행 공백을 무시하고 행의 끝에서 끝나도록 ey를 숫자로 정렬합니다. 그러나 이는 십진수의 초기 순서만 ​​고려하는 숫자 정렬에는 중요하지 않습니다.21b

예를 들어 다음 두 줄 사이에 동점이 있는 경우:

    F91HE*-K92HA      7.242      3.910   4.88e+04 --
  F91HE*-F91HZ      7.237      7.122   7.85e+05 --

그런 다음 두 줄을 완전히 문자열로 비교하는 최후의 수단을 기준으로 순서가 정렬됩니다.

일부 로케일의 경우 문자열을 비교할 때 공백이 먼저 무시됩니다. 이 경우 F91이 K92 앞에 나타납니다( F이전 sort 에서처럼 K). 다른 로캘의 경우(C 로캘의 경우와 마찬가지로) 공백은 무시되지 않으며 K92는 F91 앞에 표시됩니다(공백은 앞에 정렬됨 F).

로케일에 관계없이 선행 공백을 무시하는 최후의 수단 정렬의 경우 다음을 수행할 수 있습니다.

sort -k 1.2bn -k 1b < file

1b함수는 선행 공백을 무시하고 첫 번째 필드로 시작하는 줄 부분을 어휘적으로(첫 번째 키의 관계에 따라) 정렬합니다.

관련 정보