对 -u 和 -c 进行排序,它有什么作用?

对 -u 和 -c 进行排序,它有什么作用?

sort的选项的手册页-u显示:

使用-c,检查严格排序; without -c,仅输出相等运行的第一个

有人可以帮我将其翻译成基本英语吗?该-uc选项为我提供了与 only 相同的输出-c

答案1

严格排序意味着任何值都不能重复。比较输出

printf "%s\n" 1 2 3 4 4 | sort -uc

与那个

printf "%s\n" 1 2 3 4 4 | sort -c

答案2

选项-csort导致sort检查输入数据是否正确排序,同时考虑任何其他选项。它不会执行任何排序。在 的一些实现中sort-c可以写成--check

因此,sort -u -c将对数据进行检查,并让您知道数据是否已排序并包含任何重复条目。如果它已排序并且不包含重复条目,则不会显示任何内容,但如果存在重复条目或数据未排序,它将生成一条诊断消息并以非零退出状态退出。

您可以通过以下方式使用它:

if sort -uC file; then
   echo 'file is sorted and contains no duplicate entries'
else
   echo 'file is unsorted or contains duplicate entries'
fi

-C选项执行相同的操作,-c但停止sort产生任何输出。-C有时可以写成--check=quiet--check=silent

答案3

以下是扩展排序手册 ( info coreutils 'sort invocation') 的解释:

' - 独特的'

通常,仅输出比较相等的行序列中的第一行。对于 --check(-c 或 -C)选项,检查没有一对连续行比较相等。

即,将-c(检查)与-u(唯一)结合起来,从逻辑上讲,将检查输入中是否有重复项。

例如:

%echo -e "a\na\nb\nc"| sort -c && echo OK
OK

%echo -e "a\na\nb\nc"| sort -uc && echo OK
sort: -:2: disorder: a

虽然输入已排序(a->a->b->c),但存在重复项,因此-uc会失败。

相关内容