我有一个文件需要以特定方式排序,但我不知道如何去做。
我尝试了以下命令但它并没有给我我想要的结果:
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
它将第二个字段按相反顺序排序。