准确的AWK阵列搜索

时间:2018-04-27 02:00:09

标签: arrays bash awk

有人可以提供一些帮助让这个AWK正确搜索吗?

我需要搜索" sample.txt" "组合"中所有6个数组元素的文件文件。但是,我需要从每个单个字符进行搜索,而不是像普通的文本编辑器搜索框类型搜索一样,每次搜索后按块搜索。我需要以最挤压的方式搜索,以便精确地显示它发生的每一次。例如,我需要在字符串中找到的搜索类型" AAAAA"组合" AAA"发生3次,而不是1次。请参阅我之前关于此的帖子:BASH: Search a string and exactly display the exact number of times a substring happens inside it

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输出所需的输出?不能够感谢你。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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