排序-u的意外结果

时间:2016-11-24 00:16:38

标签: linux sorting unix

如果我这样运行:

printf "Will be second line post-sort\nWill be first line post-sort" \
  | sort -k1,1  

我得到了输出:

Will be first line post-sort  
Will be second line post-sort  

符合预期(关键字段相同但排序使用最后的比较)。但是,如果我添加-u选项:

printf "Will be second line post-sort\nWill be first line post-sort" \
  | sort -k1,1 -u  

我得到了输出:

Will be second line post-sort

而不是预期的:

Will be first line post-sort 

为什么sort -u会返回预排序数据的第一行而不是这种情况下排序后数据的第一行?

BTW我可以通过排序(不带-u)来获得所需的行为:

printf "Will be second line post-sort\nWill be first line post-sort" \
  | sort -k1,1 | sort -k1,1 -u  

1 个答案:

答案 0 :(得分:3)

我认为你不能确切地依赖输出中的哪一行。 POSIX说:

  

-u
  唯一:在每组线中具有相同键的除了一个之外的所有线。

它没有说明哪个行具有相同的键将在输出中,只是它们只有一个。因此,如果您需要特定的工具,则应使用其他工具,例如awk