[英]sort command giving unexpected output
我在列中有兩個具有相同字符串但順序不同的文件。
文件test1:
testbench.clk1 667
testbench.clk1_temp_net 667
testbench.clk 2000
和文件test2:
testbench.clk1 533
testbench.clk 1611
testbench.clk1_temp_net 538
我在兩個文件的第1列上都運行了sort命令,它給出了不同的輸出:
sort -t " " -k1 test1
testbench.clk1 667
testbench.clk1_temp_net 667
testbench.clk 2000
sort -t " " -k1 test2
testbench.clk1 533
testbench.clk 1611
testbench.clk1_temp_net 538
您能解釋一下為什么我得到此輸出以及對此的正確解決方案是什么?
從info sort
:
許多選項都會影響“排序”比較行的方式; 如果結果出乎意料,請嘗試使用'--debug'選項以查看發生了什么。
讓我們這樣做(在我的de_DE.utf8系統上)
sort --debug -k1 file1
sort: es werden die Sortierregeln für »de_DE.utf8“ verwendet
sort: führende Leerzeichen sind signifikant in Schlüssel 1: Sie sollten daher wahrscheinlich auch „b“ angeben
不幸的是,用英語運行命令來顯示會發生什么是沒有意義的。 要翻譯它:
sort: sorting rules for »de_DE.utf8“ in use
sort: preceding whitspace is significant in key 1: You might want to use „b“
當我使用以下命令運行命令時:
LANG=C sort -k1b file1
可以只是
LANG=C sort -b file1
訂單看起來還可以。 我想這對您來說也是一個地區問題。
順便說一句,如果要分層排序的field1,則field2然后使用:
LANG=C sort -k1,1b -k2,2n file
這個問題被標記為bash,但是事實證明OP正在使用csh
。 在這種情況下,您需要像這樣傳遞$LANG
:
env LANG=C sort ...
為了正確排序,您需要指定鍵,您將使用這些鍵對列表中的第一列然后第二列進行數據排序。
sort -k1,1 -k2,2 test1
testbench.clk 2000
testbench.clk1 667
testbench.clk1_temp_net 667
和文件2
sort -k1,1 -k2,2 test2
testbench.clk 1611
testbench.clk1 533
testbench.clk1_temp_net 538
如果像以前一樣僅使用-k1,則它將需要第一個鍵到行尾-與默認排序相同。 問題在於,顯然排序與某些語言一樣將數字之間的空格視為千位分隔符。 即使不使用數字排序,這也會使testbench.clk 1611
成為testbench.clk1611
和testbench.clk1 533
成為testbench.clk1533
。
無需弄亂LANG或LC_COLLATE變量。 這樣做可能會導致您的排序對於某些語言產生錯誤的結果。 例如,捷克語及其他許多語言中使用的字符č
將會被錯誤地排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.