他所有的,我有一个文件有一些列。 我想对第2列进行sorting,然后对第1列应用uniq。我发现这篇文章讨论sort和uniq的同一列,但是我的问题有点不同。 我正在考虑使用sort
和uniq
东西,但不知道如何。 谢谢。
你可以使用管道,但是它没有到位。
例如:
$ 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)
编辑 :如果我正确理解了新的要求,它按colum 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
这是你所期望的吗? 否则,我不明白:-)
uniq
需要数据按排序顺序工作,所以如果你在第二个字段sort
,然后在第一个字段上应用uniq
,你将得不到正确的结果。
你可能想尝试
sort -u -t, -k1,1 filename | sort -t, -k2,2
只要确定我明白你的意思。 您想根据文件中的第二列对文件进行排序。 然后你想从第一列删除重复项(另一种说法是将uniq应用到第一列!)。 很酷,要做到这一点,你需要执行三项任务:
使用管道:命令是
sort -t ',' -k1 fileName| awk '!x[$1]++' | sort -t ',' -k2
请注意,您不能指定uniq中的第一个字段,您可以使用-f
开关跳转前n
字段。 因此,我用awk
来取代uniq
。
我用这种sort -t ',' -nk2
这里排序
1,2 2,5 3,1 to 3,1 1,2 2,5