如何解决如何基于一列排序,但基于另一列的uniq?
| 他都 我有一个包含一些列的文件。我想对第2列进行排序,然后对第1列应用uniq。我发现这篇文章讨论的是同一列的sort和uniq,但是我的问题有点不同。我正在考虑使用sort
和uniq
进行操作,但不知道如何使用。谢谢。
解决方法
您可以使用管道,但是管道不到位。
范例:
$ cat initial.txt
1,3,4
2,1
1,2,3
2,4
1,4,1
3,1,3
4,4
$ cat initial.txt | sort -u -t,-k1,1 | sort -t,-k2,2
3,1
结果按键2排序,按键1唯一。请注意,结果显示在控制台上,如果要将其存储在文件中,只需使用重定向(> newFiletxt
)
这种更复杂的操作的其他解决方案是依靠另一个工具(取决于您的偏好(和年龄),awk,perl或python)
编辑:
如果我正确理解新要求,则按第2列对它进行排序,第1列对于给定的第2列是唯一的:
$ cat initial.txt | sort -u -t,2 | sort -t,3
1,1
是您所期望的吗?否则,我听不懂:-)
, uniq
需要对数据进行排序才能工作,因此,如果您在第二个字段上输入sort
,然后在第一个字段上应用uniq
,则不会得到正确的结果。
您可能要尝试
sort -u -t,1 filename | sort -t,2
, 只是为了确保我正确理解了您的意思。您要根据文件中的第二列对文件进行排序。然后,您想从第一列中删除重复项(另一种说法是对列一应用uniq!)。酷,为此,您需要执行三个任务:
对将要应用uniq的列进行排序(因为uniq可以
仅适用于排序的输入)。
在已排序的列上应用uniq。
根据第二列中的值对输出进行排序。
使用管道:命令是
sort -t \',\' -k1 fileName| awk \'!x[$1]++\' | sort -t \',\' -k2
请注意,您无法在uniq中指定第一个字段,可以使用-f
开关跳过前n
个字段。因此,我用ѭ12代替了uniq
。
, 我用这个
sort -t \',\' -nk2
这里排序
1,2
2,5
3,1
to
3,5
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。