有人可以提供一些帮助让这个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输出所需的输出?不能够感谢你。
答案 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