簡體   English   中英

排序命令提供意外輸出

[英]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

這個問題被標記為但是事實證明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.clk1611testbench.clk1 533成為testbench.clk1533

無需弄亂LANG或LC_COLLATE變量。 這樣做可能會導致您的排序對於某些語言產生錯誤的結果。 例如,捷克語及其他許多語言中使用的字符č將會被錯誤地排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM