gpt4 book ai didi

linux - 删除几乎没有差异的重复行

转载 作者:太空宇宙 更新时间:2023-11-04 12:02:30 24 4
gpt4 key购买 nike

我有一个动态 文本文件,可以自动写入一些行。但是重复的条目有问题:

例如:

1111 2222 3333 4444 <- I want this line
5555 6666 7777 8888 <- And this line too
1111 2222 3333 4444
5555 6666 7777 9999 <- Note : 9999 is only one ward change

预期结果:

1111 2222 3333 4444
5555 6666 7777 8888

真实测试示例:

exten => 01272786170,1,Set(CALLERID(num)=821)
same => n,Dial(SIP/port21/01272786170,60,rt)
same => n,Set(thereis=yes01272786170)
same => n,Set(calledid=01272786170)
same => n,GotoIf("calledid" = "01272786170"?ejoin,01272786170,1)
exten => 01272786170,1,Set(CALLERID(num)=826) <- duplicated here with one number change
same => n,Dial(SIP/port26/01272786170,60,rt) <-
exten => 01272786170,1,Set(CALLERID(num)=827) <-
same => n,Dial(SIP/port27/01272786170,60,rt) <-

预期结果:

exten => 01272786170,1,Set(CALLERID(num)=821)
same => n,Dial(SIP/port21/01272786170,60,rt)
same => n,Set(thereis=yes01272786170)
same => n,Set(calledid=01272786170)
same => n,GotoIf("calledid" = "01272786170"?ejoin,01272786170,1)

注意:我希望使用 Linux Shell 完成它。

非常感谢。

最佳答案

使用 awk 和您的第一个示例数据:

如果您实现 Levenshtein 算法(例如 here)并想出足够的编辑距离(下面的 4),您可以使用这种简单的方法:

awk '
function levdist(str1, str2 ...) # see the above link for working implementation
{
...
}
{
for(i in a) { # iterate all previous stored strings
l=levdist($0,a[i]) # compute the edit distance
if(l<=4) # if below threshold
next # skip to next string
}
print $0 # output where threshold was not met
a[NR]=$0 # store
}' file

输出:

1111 2222 3333 4444
5555 6666 7777 8888

关于linux - 删除几乎没有差异的重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51842004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com