准确的尴尬阵列搜索



任何人都可以提供一些帮助使此尴尬正确搜索的帮助吗?

我需要在" sample.txt"文件中搜索"组合"文件中的所有6个数组元素。但是,我需要从每个字符而不是像普通的文本编辑框类型搜索搜索进行搜索,该搜索每次发生后都会按块进行搜索。我需要以最挤压的方式进行搜索,以便每次发生一次。例如,我需要在字符串" AAAAA"组合" AAA"中发现的搜索类型,而不是1次。请参阅我以前的文章:bash:搜索字符串,并准确地显示在其内部发生的次数的确切次数

sample.txt文件是:

AAAAAHHHAAHH

组合文件是:

AA  
HH  
AAA  
HHH  
AAH  
HHA  

如何获得脚本

#!/bin/bash
awk 'NR==FNR {data=$0; next} {printf "%s %d n",$1,gsub($1,$1,data)}' 'sample.txt' combinations > searchoutput

输出所需的输出:

AA 5
HH 3
AAA 3
HHH 1
AAH 2
HHA 1 

而不是当前输出的内容:

AA 3 
HH 2 
AAA 1 
HHH 1 
AAH 2 
HHA 1 

正如我们所看到的,脚本只能像文本编辑器一样找到组合。我需要它从每个字符的开头搜索组合,以便发生所需的输出。

如何使尴尬输出所需的输出?不能非常感谢。

可能会有一种更快的方法来找到第一匹匹配并从该索引中携带,但这可能更简单

$ awk 'NR==1{content=$0;next} 
            {c=0; len1=length($1); 
             for(i=1;i<=length(content)-len1+1;i++)
                c+=substr(content,i,len1)==$1;
             print $1,c}' file combs
AA 5
HH 3
AAA 3
HHH 1
AAH 2
HHA 1

您可以尝试以下方法:

$ awk '{x="AAAAAHHHAAHH"; n=0}{
    while(t=index(x,$0)){n++; x=substr(x,t+1) } 
    print $0,n
}' combinations.txt 
AA 5
HH 3
AAA 3
HHH 1
AAH 2
HHA 1

最新更新