-u在sort命令中不起作用

时间:2012-06-15 04:07:25

标签: bash

我使用此命令根据第一列对文件进行排序,并删除第一列中的重复行:

sort  -t" " -k1 -u

但它不起作用?

2 个答案:

答案 0 :(得分:5)

GNU排序不考虑整个行-u,因为其他人已经回答了。它将考虑用于排序的字段。

在您的情况下,您将所有字段排序为-k,其中一个字段编号表示要开始排序的字段。使用两个数字,您还可以指定结束字段。

尝试:

sort -t" " -k1,1 -u

这限制了排序仅在第一个字段而不是其他字段上排序。仅在该字段上检查唯一性。

使用@Shawn Chin的测试文件:

$ 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

答案 1 :(得分:0)

编辑:我的原始建议使用了一个关联数组,但后来我看到了@Shawn Chin的回答,并意识到我过于复杂。这是Shawn使用bash的解决方案:

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