我使用此命令根据第一列对文件进行排序,并删除第一列中的重复行:
sort -t" " -k1 -u
但它不起作用?
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
编辑:我最初的建议使用了关联数组,但后来我看到@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)