2

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

sort  -t" " -k1 -u

但它不起作用?

4

2 回答 2

5

GNU sort 不会-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
于 2012-06-15T09:09:42.257 回答
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)
于 2012-06-15T08:52:36.153 回答