GNU 排序空列的不一致行为
GNU sort inconsistent behaviour for empty columns
我正在使用 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
7.4 版 :%!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
以这种方式对行进行排序?是否可以按照我的第一个 example/expected 输出中的方式排列它们?提前致谢!
我正在使用 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
我正在使用 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
7.4 版 :%!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
以这种方式对行进行排序?是否可以按照我的第一个 example/expected 输出中的方式排列它们?提前致谢!
我正在使用 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