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


11

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

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

즉, 행에서 비 공백의 첫 번째 시퀀스의 두 번째 및 다음 문자에서 숫자로 정렬하십시오.


분명히 편집기는 파일에 사용 된 형식을 유지하지 못했습니다 ....
edith

sort명령 을 시도 했습니까 ?
Eric Renouf

네,하지만 분명히 나는 ​​그것을 올바르게 사용하는 방법을 모르겠습니다 ... 그 효과
edith

1
두 번째 문자부터 시작하여 숫자에 따라 정렬 하시겠습니까?
pfnuesel

바로 그거죠. 문제는 파일에서 첫 번째 필드 이전에 다른 수의 공백이 있다는 것입니다
edith

답변:


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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.