仅打印重复项中的一个值

仅打印重复项中的一个值

我的文件中有以下内容。

$ cat file.txt
code-coverage-api 
jsch 
cloudbees-folder 
apache-httpcomponents-client-4-api 
apache-httpcomponents-client-4-api 
jsch 
apache-httpcomponents-client-4-api 
jsch 
apache-httpcomponents-client-4-api 
jackson2-api 
apache-httpcomponents-client-4-api 
workflow-api 
echarts-api 
workflow-api 
envinject-api 
workflow-durable-task-step 
apache-httpcomponents-client-4-api 

我的预期输出是:

code-coverage-api 
jsch 
cloudbees-folder 
apache-httpcomponents-client-4-api  
jackson2-api 
workflow-api 
echarts-api 
envinject-api 
workflow-durable-task-step 

目前,我正在对内容进行排序,如下所示,然后手动删除重复项(除了一个元素)。

$ cat file.txt |sort

有没有一种方法可以在文件中仅保留一个重复元素并从列表中删除剩余的重复元素?另外,请记住,有些元素没有任何重复项。

答案1

您可以将行号添加到输出中,cat -n然后在第二个字段上进行唯一排序。
然后对第一个字段进行数字排序以保留原始顺序并使用以下命令删除行号cut

$ cat -n file.txt | sort -uk2,2 | sort -nk1,1 | cut -f2
code-coverage-api
jsch
cloudbees-folder
apache-httpcomponents-client-4-api
jackson2-api
workflow-api
echarts-api
envinject-api
workflow-durable-task-step

答案2

尝试以下操作来获取文件的唯一元素

cat file.txt | sort | uniq

如果你想删除重复项。然后你可以通过以下命令更新文件

cat file.txt | sort | uniq > file.txt

[注意:uniq 仅考虑相邻元素。这就是为什么我们必须对它们进行排序。]

相关内容