Linux
當 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
現在我更詳細地嘗試按第五列對相同的內容進行排序,並使用該列的第 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.4
vs ,在另一種情況下是vs )。2.1``5.3``4.3
我想了解以下情況是如何工作的:
- 鍵結束後鍵開始(例如
-k2.4n,2.1
:)- 以欄位開頭並以之前出現的欄位結尾的鍵(例如
-k6,5
:)- 以欄位中的字元開頭並以之前出現的欄位的字元結尾的鍵(例如
-k6.4,5.3
:)提前非常感謝!
從左到右未定義有效範圍的排序鍵將被忽略。
這是我們在您的測試中看到的,也在 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.