2012-06-15 55 views
2

我用这个命令来基于列一个文件整理工作,并在第一列中移除重复的行:-u不sort命令

sort -t" " -k1 -u 

但它不工作?

+3

-u认为整条生产线,也不会看只是一个单一的列 –

+0

我怎样可以删除重复的线路? – user1436187

+0

如果整行不一样,只是第一列,你打算如何处理其他行?你想选择哪条线?第一行? –

回答

5

GNU排序不考虑-u全行其他的回答。它会考虑用于排序的字段。

在你的情况下,你正在排序所有字段为-k与一个字段号说明哪个字段开始排序。用两个数字,你也可以指定结束字段。

尝试:

sort -t" " -k1,1 -u 

这限制了排序仅在第一场和没有其他排序。只有在该字段才会检查唯一性。

要使用@Shawn齐秦的测试文件:

$ cat in.txt 
1 2 3 4 
3 4 4 4 
1 3 4 5 
2 3 4 5 
$ sort -k1,1 -u in.txt 
1 2 3 4 
2 3 4 5 
3 4 4 4 
$ sort -k2,2 -u in.txt 
1 2 3 4 
1 3 4 5 
3 4 4 4 
+0

Spot on。 +1 ... –

0

编辑:我原来的建议使用了一个关联数组,但后来我看到@Shawn Chin的答案,并意识到我正在过度复杂。下面是使用bash肖恩的解决方案:

while read field1 theRest 
do 
    if [[ $prev != $field1 ]] 
    then 
     echo "$field1 $theRest" 
     prev=$field1 
    fi 
done < <(sort -t" " -k1 gash.txt)