他全部,
我有一个包含一些列的文件。我想对第2列进行排序,然后对第1列应用uniq。我发现这个post正在讨论同一列的sort和uniq,但我的问题有点不同。我正在考虑使用sort
和uniq
但不知道如何使用。感谢。
答案 0 :(得分:7)
您可以使用管道,但它不到位。
示例:
$ cat initial.txt
1,3,4
2,3,1
1,2,3
2,3,4
1,4,1
3,1,3
4,2,4
$ cat initial.txt | sort -u -t, -k1,1 | sort -t, -k2,2
3,1,3
4,2,4
1,3,4
2,3,1
结果按键2排序,按键1唯一。注意结果显示在控制台上,如果您想在文件中使用,只需使用重定向(> newFiletxt
)
此类更复杂操作的其他解决方案是依赖其他工具(取决于您的偏好(和年龄),awk,perl或python)
修改强>: 如果我理解正确的新要求,它按字母2排序,第1列对于给定的列2是唯一的:
$ cat initial.txt | sort -u -t, -k1,2 | sort -t, -k2,2
3,1,3
1,2,3
4,2,4
1,3,4
2,3,1
1,4,1
这是你所期望的吗?否则,我不明白: - )
答案 1 :(得分:0)
uniq
需要数据按排序顺序才能正常工作,因此,如果您在第二个字段上sort
,然后在第一个字段上应用uniq
,则无法获得正确的结果。
您可能想尝试
sort -u -t, -k1,1 filename | sort -t, -k2,2
答案 2 :(得分:0)
只是为了确保我明白你的意思。您希望根据文件中的第二列对文件进行排序。然后你想从第一列中删除重复项(另一种说法是将uniq应用于第一列!)。很酷,要做到这一点,你需要执行三项任务:
使用管道:命令是
sort -t ',' -k1 fileName| awk '!x[$1]++' | sort -t ',' -k2
请注意,您无法在uniq中指定第一个字段,您可以使用-f
开关跳转第一个n
字段。因此,我使用awk
替换uniq
。
答案 3 :(得分:0)
我用过这个
sort -t ',' -nk2
这里排序
1,2
2,5
3,1
to
3,1
1,2
2,5