sort 명령이 내림차순으로 키 범위를 제공하면 어떻게 되나요?

sort 명령이 내림차순으로 키 범위를 제공하면 어떻게 되나요?

sort" " 명령에 대해 이해하려고 노력하고 있지만 어려움을 겪고 있습니다. 여기서 도움을 받기를 바랍니다.

다음 내용이 포함된 " "라는 파일이 있습니다 my_file.csv(" "을 가지고 놀기 위해 직접 생성함 sort).

Id,RandomNumber,UUID,RandomPassword,Letters,RandomWord
1,18934,42ab7251-daaf-4a10-8349-213fef22ce78,l5ZIkKjF8QGlN9GmZ9qd,AAA,keelboatman
2,22045,bfc9d720-e8f8-406a-9841-c02edc2500bb,EPq64i1LaYTsNbB0ts78,BBB,unbinds
3,14468,b2d0f699-66c1-4571-9228-66399c1329a5,t9CzSFBZd8dS9gN3J3mO,CCC,foaminess
4,9359,4bf377b6-1b89-474f-a34b-4e5ca55f03a1,G2dwlMDdbYPUOGX68mmg,DDD,filander
5,31147,d1d9a6d4-7a8e-4fd5-a2a2-a2915614a054,ZaMw16rF3t1OjIGFc6KM,AAA,runologist
6,9909,5313eec0-99ac-4ec7-a8cf-7ee8847f98d4,VeZhlqMEDvAderKvB8qk,BBB,upgathering
7,10228,7e2e7cdf-b38a-4014-8235-c6f351068a14,A9EmNnksYK0AE9DVQcEG,CCC,nondiaphanousness
8,22815,75962dfe-cfd1-42cb-b14d-96dd8a01a165,Qy1NyB3xnkuhEH1Gh7Pb,DDD,extirpate
9,12688,c25c9468-83f7-4751-82c6-c150e538207b,wDSlIMIne6hQ8B7OIYip,AAA,aldamine
10,4133,f683f78a-f627-48aa-91b2-6f449f56fb23,LhxaoVi1fV7kFhFwXATA,DDD,underhole

다섯 번째 열을 사용하여 이 파일의 내용을 정렬하려면 다음을 사용합니다.

$ tail -n +2 my_file.csv | sort -t, -k5,5
1,18934,42ab7251-daaf-4a10-8349-213fef22ce78,l5ZIkKjF8QGlN9GmZ9qd,AAA,keelboatman
5,31147,d1d9a6d4-7a8e-4fd5-a2a2-a2915614a054,ZaMw16rF3t1OjIGFc6KM,AAA,runologist
9,12688,c25c9468-83f7-4751-82c6-c150e538207b,wDSlIMIne6hQ8B7OIYip,AAA,aldamine
2,22045,bfc9d720-e8f8-406a-9841-c02edc2500bb,EPq64i1LaYTsNbB0ts78,BBB,unbinds
6,9909,5313eec0-99ac-4ec7-a8cf-7ee8847f98d4,VeZhlqMEDvAderKvB8qk,BBB,upgathering
3,14468,b2d0f699-66c1-4571-9228-66399c1329a5,t9CzSFBZd8dS9gN3J3mO,CCC,foaminess
7,10228,7e2e7cdf-b38a-4014-8235-c6f351068a14,A9EmNnksYK0AE9DVQcEG,CCC,nondiaphanousness
10,4133,f683f78a-f627-48aa-91b2-6f449f56fb23,LhxaoVi1fV7kFhFwXATA,DDD,underhole
4,9359,4bf377b6-1b89-474f-a34b-4e5ca55f03a1,G2dwlMDdbYPUOGX68mmg,DDD,filander
8,22815,75962dfe-cfd1-42cb-b14d-96dd8a01a165,Qy1NyB3xnkuhEH1Gh7Pb,DDD,extirpate

두 번째 열(숫자)을 가정하고 두 번째 키를 사용하여 동일한 파일을 정렬하려면 다음을 사용합니다.

$ tail -n +2 my_file.csv | sort -t, -k5,5 -k2n,2
9,12688,c25c9468-83f7-4751-82c6-c150e538207b,wDSlIMIne6hQ8B7OIYip,AAA,aldamine
1,18934,42ab7251-daaf-4a10-8349-213fef22ce78,l5ZIkKjF8QGlN9GmZ9qd,AAA,keelboatman
5,31147,d1d9a6d4-7a8e-4fd5-a2a2-a2915614a054,ZaMw16rF3t1OjIGFc6KM,AAA,runologist
6,9909,5313eec0-99ac-4ec7-a8cf-7ee8847f98d4,VeZhlqMEDvAderKvB8qk,BBB,upgathering
2,22045,bfc9d720-e8f8-406a-9841-c02edc2500bb,EPq64i1LaYTsNbB0ts78,BBB,unbinds
7,10228,7e2e7cdf-b38a-4014-8235-c6f351068a14,A9EmNnksYK0AE9DVQcEG,CCC,nondiaphanousness
3,14468,b2d0f699-66c1-4571-9228-66399c1329a5,t9CzSFBZd8dS9gN3J3mO,CCC,foaminess
10,4133,f683f78a-f627-48aa-91b2-6f449f56fb23,LhxaoVi1fV7kFhFwXATA,DDD,underhole
4,9359,4bf377b6-1b89-474f-a34b-4e5ca55f03a1,G2dwlMDdbYPUOGX68mmg,DDD,filander
8,22815,75962dfe-cfd1-42cb-b14d-96dd8a01a165,Qy1NyB3xnkuhEH1Gh7Pb,DDD,extirpate

이제 좀 더 자세히 살펴보고 다섯 번째 열을 기준으로 해당 열의 두 번째와 세 번째 숫자를 사용하여 동일한 내용을 정렬해 보겠습니다 RandomNumber. 이를 위해 다음과 같은 것을 사용합니다.

$ tail -n +2 my_file.csv | sort -t, -k5,5 -k2.2n,2.3
5,31147,d1d9a6d4-7a8e-4fd5-a2a2-a2915614a054,ZaMw16rF3t1OjIGFc6KM,AAA,runologist
9,12688,c25c9468-83f7-4751-82c6-c150e538207b,wDSlIMIne6hQ8B7OIYip,AAA,aldamine
1,18934,42ab7251-daaf-4a10-8349-213fef22ce78,l5ZIkKjF8QGlN9GmZ9qd,AAA,keelboatman
2,22045,bfc9d720-e8f8-406a-9841-c02edc2500bb,EPq64i1LaYTsNbB0ts78,BBB,unbinds
6,9909,5313eec0-99ac-4ec7-a8cf-7ee8847f98d4,VeZhlqMEDvAderKvB8qk,BBB,upgathering
7,10228,7e2e7cdf-b38a-4014-8235-c6f351068a14,A9EmNnksYK0AE9DVQcEG,CCC,nondiaphanousness
3,14468,b2d0f699-66c1-4571-9228-66399c1329a5,t9CzSFBZd8dS9gN3J3mO,CCC,foaminess
10,4133,f683f78a-f627-48aa-91b2-6f449f56fb23,LhxaoVi1fV7kFhFwXATA,DDD,underhole
8,22815,75962dfe-cfd1-42cb-b14d-96dd8a01a165,Qy1NyB3xnkuhEH1Gh7Pb,DDD,extirpate
4,9359,4bf377b6-1b89-474f-a34b-4e5ca55f03a1,G2dwlMDdbYPUOGX68mmg,DDD,filander

이제 제가 이해하고 싶은 것은 이것이 어떻게 작동하는지입니다.

$ tail -n +2 my_file.csv | sort -t, -k5,5 -k2.4n,2.1

또는

$ tail -n +2 my_file.csv | sort -t, -k5,5 -k5.3,4.3

두 경우 모두 두 번째 키의 시작은 키 끝 뒤에 옵니다( 2.4한 경우에는 vs, 다른 경우에는 vs).2.15.34.3

다음 시나리오가 어떻게 작동하는지 이해하고 싶습니다.

  • 키가 시작된 후에 키가 종료됩니다(예: -k2.4n,2.1).
  • 키는 필드로 시작하고 이전에 발생한 필드로 끝납니다(예: -k6,5)
  • 키는 필드 내의 문자로 시작하고 이전에 표시된 필드의 문자로 끝납니다(예: -k6.4,5.3)

미리 감사드립니다!

답변1

유효한 왼쪽에서 오른쪽 범위를 정의하지 않는 정렬 키는 무시됩니다.

이는 테스트에서 볼 수 있는 내용이며 POSIX 매뉴얼에도 정의되어 있습니다.

       −k field_start[type][,field_end[type]]

   shall  define a key field that begins at field_start and ends at field_end inclusive, unless field_start falls
   beyond the end of the line or after field_end, in which case the key field is empty.

사용하는 경우 해당 키에 대해 변경된 사항이 없음을 나타내는 잘못된 키의 시작 부분을 가리키는 --debug메시지가 각 줄에 표시됩니다 .^ no match for key

귀하의 예에는 단독으로 사용되는 이전의 유효한 키가 있습니다. 또는 널 키 앞이나 뒤에 다른 유효한 키 시퀀스를 수행하십시오. 그리고 다음에서 man sort:

If no key is given, use the entire line as the key. 

관련 정보