gpt4 book ai didi

bash - GNU 排序空列的不一致行为

转载 作者:行者123 更新时间:2023-11-29 09:29:13 25 4
gpt4 key购买 nike

我正在使用 sort(GNU coreutils,版本 8.4)实用程序按文件的前五列对文件进行排序,所有这些都是数字并由制表符分隔。为此,我使用了以下调用:

sort --field-separator=$'\t' -nk1 -nk2 -nk3 -nk4 -nk5 myFileUnsorted.bcp >  myFileSorted.bcp

这在大多数情况下工作正常,但当存在空值时,我会得到一些(看似)不一致的行为。在我的特定情况下,第三(和第四)列中的条目为空,我希望排序后的结果如下所示:

...
1 2 0 ...
1 2 84 ...
1 2 168 ...
...

在我的输出文件中,我得到了以下顺序:

1   2           0   ...
1 2 1 0 ...
1 2 1 84 ...
...
1 2 64 168 ...
1 2 84 ...
1 2 168 ...

无论第三(/第四)列中包含空值的条目应该放在开头还是结尾,我都希望它们放在一起。

在十六进制编辑器(vim version 7.4 with :%!xxd)中查看有问题的三行,我得到以下信息:

31 09 32 09 09 09 30 09        ...
31 09 32 09 09 09 38 34 09 ...
31 09 32 09 09 09 31 36 38 09 ...

这让我相信空列中没有特殊的、不可见的字符可能导致它们彼此分开排序。

有谁知道为什么 sort 会这样排序行?是否可以按照我的第一个示例/预期输出中的方式排列它们?提前致谢!

我正在使用 bash(GNU bash,版本 4.1.2(1)-release (x86_64-redhat-linux-gnu))并尝试过 ksh(版本 AJM 93u+),两者都产生了相同的结果,如果有任何区别的话。

最佳答案

通过使用 -nk3,您告诉 sort 对值从第三列开始 进行排序,但您没有告诉它它们结束的地方,所以它使用剩下的整行作为值。

要仅使用特定列,请使用

-nk3,3

事实上,我会为所有我不想包含该行其余部分的列使用相同的符号。

sort --field-separator=$'\t' -nk1,1 -nk2,2 -nk3,3 -nk4,4 -nk5,5 \
myFileUnsorted.bcp > myFileSorted.bcp

关于bash - GNU 排序空列的不一致行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54714213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com