sortコマンドが降順にキー範囲を指定した場合はどうなりますか?

sortコマンドが降順にキー範囲を指定した場合はどうなりますか?

sort" "コマンドを理解しようとしていますが、問題が発生しています。ここで助けを願っています。

次のようなファイルが含まれていますmy_file.csvsort

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

5番目の列を使用してこのファイルの内容を並べ替えるには、次のようにします。

$ 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

2番目の列(数字)を想定し、2番目のキーを使用して同じファイルをソートするには、次のようにします。

$ 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

もう少し詳しく見て、5番目の列に基づいてその列の2番目と3番目の数字を使用して同じ内容を並べ替えてみましょう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番目のキーの先頭はキーの最後に続きます(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. 

おすすめ記事