我必须在文本文件中搜索唯一的行,但是还有一个额外的调整。我需要考虑重复第一部分(用点分隔)相等的线。 例如:
DEASLR98
DEASLR98.acme.it
这些行相等,但是
sort file.txt | uniq
包括他们两个。有任何建议如何仅包含完整域信息的行(例如DEASLR98.acme.it)? 谢谢!
答案 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
)保留在数组中。最后,我们打印出数组中的值。这显然需要数组适合内存。