Bash sort -nu会导致意外行为

时间:2017-03-01 08:36:23

标签: linux bash shell sorting command

我的同事今天注意到sort命令有些奇怪的行为,我想知道是否有人知道这个命令的输出是否是有意的?

鉴于文件:

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选项,那么排序就像人们期望的那样。

2 个答案:

答案 0 :(得分:1)

使用class PhotobookFilter(df.FilterSet): brand = df.CharFilter(method='filter_brand') def filter_brand(self, queryset, name, value): return queryset.filter(**{'attributes__type': 'brand', 'attributes__value': value}) an empty number is zero

  

按数字排序。该数字从每一行开始,由可选项组成   空格,可选的' - '符号,可能是零或多个数字   由数千个分隔符分隔,可选地后跟一个   小数点字符和零个或多个数字。空数是   被视为'0'。

所有这些行在行的开头都有一个空数字,因此对于-n的数字唯一性它们都是零。如果您使用相同的数字开始每一行,例如sort,效果将是相同的。您应该明确指定包含数字的字段,或使用版本排序(1):

-V

答案 1 :(得分:1)

您缺少将GNU sort的第二个字段指定为

sort -nu -t'_' -k2 file
ABC_1
ABC_10
ABC_22
ABC_43
ABC_123

数字排序的标记-n,唯一行的-u部分是将限制器设置为_并对第二个排序_完成-k2之后的字段。