使用 sort 和 uniq 对两列进行排序

使用 sort 和 uniq 对两列进行排序

我有一个文件需要以特定方式排序,但我不知道如何去做。

我尝试了以下命令但它并没有给我我想要的结果:

sort -t" " -k1,1 Original_File | uniq -d > Desired_Output

原始文件:

User1 US
User1 NG
User2 US
User3 US
User4 US
User4 EN
User5 US

期望输出:

User1 US
User1 NG
User4 US
User4 EN

答案1

您可以提取第一列,挑选出重复项,然后再次从文件中将它们 grep 回来:

cut -f1 -d' ' Original_File | sort | uniq -d | grep -wFf- Original_File

答案2

示例输入和输出已更新;第一部分中的示例使用原始示例输入来显示变体的详细示例:

原始输入Original_File

User1 US
User1 NG
User2 US
User3 US
User4 US
User5 US

您可以跳过该userN部分,uniq并选择-f跳过前导字段 - 以空格分隔:

$ sort -t" " -k1,1 Original_File | uniq -f 1 
User1 NG
User1 US

对于与示例输出相同的顺序,您可以反转排序 - 这将更改唯一行的“标签”值:

$ sort -r -t" " -k1,1 Original_File | uniq -f 1
User5 US
User1 NG

注意User5第一行结果中的。如果不可接受,只需重新排序:

$ sort -t" " -k1,1 Original_File | uniq -f 1 | sort  -t" " -k1,1 -r
User1 US
User1 NG

如果该UserN部分没有用空格分隔,但具有固定长度,则可以用uniq以下选项跳过它-s

$ sort -t" " -k1,1 Original_File | uniq -s 6
User1 NG
User1 US

使用更新的示例输入,这是创建所需排序顺序的命令:

$ sort -t" " -k1,1 Original_File | uniq -f 1 | sort -t" " -k1,1  -k2,2r
User1 US
User1 NG
User4 US
User4 EN

它将第二个字段按相反顺序排序。

相关内容