Unix 정렬 기능은 문자열을 숫자로 완전히 정렬할 수 없습니다.

Unix 정렬 기능은 문자열을 숫자로 완전히 정렬할 수 없습니다.

탭으로 구분된 두 개의 열이 포함된 파일이 있습니다.

  A10         A10_motorway_(Switzerland)              
  A-10        A-10_N/AW
  A10         A10_Networks
  A-10        A-10_road
  A10         A10_road                  
  A10_road_(California)      A10_road_(Canada)      
  A10_road_(Croatia)         A10_road_(disambiguation)  
  A10_road_(England)         A10_road_(Great_Britain)   
  A10_road_(Isle_of_Man)     A10_road_(Isle_of_Man) 
  A10_road_(Latvia)          A10_road_(Malaysia)
  A10_road_(United_Kingdom)  A10_road_(United_States_of_America)    
  A10_road_(USA)             A10_road_(Zimbabwe)
  A-10        A-10_Shrike
  A10         A10_(Switzerland)

이 파일을 첫 번째 열을 기준으로 알파벳순으로 정렬하고 싶습니다. 따라서 동일한 제목이 연속해서 나타나야 합니다.

그래서 나는 이렇게 했습니다:

     sort -t $'\t' -k1 -d filename 

그러나 결과는 실제로 위의 스냅샷입니다. 보시다시피 "A-10" 항목은 순서가 없고 연속적으로 발생하지 않습니다. 알파벳순 자체는 별로 신경쓰지 않지만, 같은 제목이 연속해서 나오길 원합니다. 정렬로 인해 이 작업이 허용되지 않는 이유와 이를 해결하는 방법을 설명할 수 있는 사람이 있나요? 감사해요!

답변1

시도해 보십시오:

LC_COLLATE=C sort myfile

과거에 비슷한 행동을 겪은 적이 있었는데, 동료의 이 제안이 도움이 되었습니다.

답변2

-k1,1나는 경험적으로 " A10"를 합치면 " "도 합해진다는 것을 알았지 A-10만 그 이유를 이해할 수 없습니다. 이는 sortGNU coreutils 8.4에서 가져온 것입니다.

관련 정보