bash在文件中查找唯一的行

时间:2016-04-13 10:18:18

标签: bash shell

我必须在文本文件中搜索唯一的行,但是还有一个额外的调整。我需要考虑重复第一部分(用点分隔)相等的线。 例如:

DEASLR98
DEASLR98.acme.it

这些行相等,但是

sort file.txt | uniq

包括他们两个。有任何建议如何仅包含完整域信息的行(例如DEASLR98.acme.it)? 谢谢!

1 个答案:

答案 0 :(得分:1)

这是一个简单的Awk uniq实现,它保持每个键的最长匹配。

awk -F . '!($1 in a) || length(a[$1]) < length($0) { a[$1] = $0 }
    END { for (k in a) print a[k] }' file.txt

-F .指示Awk在点上分割每个输入行。因此$1包含第一个点之前的字段。如果数组a中缺少此字段,或者该行长于此键的现有值,则我们将整个输入行($0)保留在数组中。最后,我们打印出数组中的值。这显然需要数组适合内存。