从文本文件中删除行,其中列重复ub​​untu

时间:2014-05-15 08:22:32

标签: bash text duplicates

我有一个如下文字文件。

1 1223 abc
2 4234 weroi
0 3234 omsder
1 1111 abc 
2 6666 weroi

我希望列3具有唯一值。所以我想拥有以下文件。

1 1223 abc
2 4234 weroi
0 3234 omsder

我可以在Linux中使用一些基本命令吗?不使用Java或其他东西。

1 个答案:

答案 0 :(得分:1)

您可以使用一些awk脚本执行此操作。以下是我提出的解决问题的一段代码:

awk 'BEGIN {col=3; sep=" "; forbidden=sep} {if (match(forbidden, sep $col sep) == 0) {forbidden=forbidden $col sep; print $0}}' input.file

BEGIN关键字声明forbidden字符串,用于监控第3列值。然后,match关键字检查当前行的第3列是否包含任何forbidden值。如果没有,它会将列的内容添加到forbidden列表并打印整行。

此处,sep=" "实例化分隔符。我们在每个sep值之间使用forbidden,以避免通过将多个值放在一起而创建的单词。例如:

1 1111 ta
2 2222 to
3 3333 t
4 4444 tato

在这种情况下,如果没有分隔符,ttato将被视为forbidden值。我们使用" "作为分隔符,因为它默认用于分隔每个列,因此列不能在其名称中包含空格。

请注意,如果要更改需要删除重复的列的编号,只需使用所需列的编号调整col=3(整行为0,第一列为1) ,2为第二,......)