linux - 排序命令给出意外输出

标签 linux sorting terminal csh

我在列中有两个具有相同字符串但顺序不同的文件。

文件测试1:

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 -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

你能解释一下为什么我会得到这个输出吗?正确的解决方案是什么?

最佳答案

来自信息排序:

Many options affect how ‘sort’ compares lines; if the results are unexpected, try the ‘--debug’ option to see what happened.

让我们这样做(在我的 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 ...

关于linux - 排序命令给出意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45742395/

相关文章:

linux - 如何在使用 sed 的模式之后删除文件末尾之前的所有内容?

javascript - 如何在 JavaScript 中根据 "before"和 "after"条件对数组进行排序?

python - 平衡两个列表,直到它们的总和相等,并且在 Python 中的两个列表中交换最小

python - 你如何摆脱 "SyntaxError: ' 等待'外部功能“

macos - 苹果机 : gnome-terminal equivalent for shell script

gcc - ld : file not found: elf_i386 error on Mac Terminal

linux - Bash 数组创建 : ("$@") vs ($@)

c - 如何在不同程序之间使用管道?

linux - 当一个进程处于不间断 sleep 状态(D)时,是否计入 "top"命令输出的累计时间?

c - 在 C 中对字符数组进行 alpha 排序的最简单方法是什么?