我的一位同事今天注意到排序命令有一些奇怪的行为,我想知道是否有人知道这个命令的输出是否是有意的?
给定文件:
ABC_22
ABC_43
ABC_1
ABC_1
ABC_43
ABC_10
ABC_123
我们希望使用数字排序对文件进行排序,并使其唯一,因此我们运行:
sort file.txt -nu
输出为:
ABC_22
现在,我们知道数字排序在这种情况下不起作用,因为行不以数字开头(这很好,这只是更大脚本的一部分),但我本来期望更多的东西行:
ABC_1
ABC_10
ABC_123
ABC_22
ABC_43
有谁知道为什么不是这样吗?如果仅单独给出 -u 或 -n 选项,则排序将按照预期进行。
最佳答案
使用-n
,an empty number is zero :
Sort numerically. The number begins each line and consists of optional blanks, an optional ‘-’ sign, and zero or more digits possibly separated by thousands separators, optionally followed by a decimal-point character and zero or more digits. An empty number is treated as ‘0’.
所有这些行在行首都有一个空数字,因此为了 sort
的数字唯一性,它们都为零。如果您以相同的数字开始每一行,例如 1
,效果将是相同的。您应该明确指定包含数字的字段,或使用版本排序 (-V
):
$ sort -Vu foo
ABC_1
ABC_10
ABC_22
ABC_43
ABC_123
关于linux - Bash sort -nu 会导致意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42526860/