首页 > 解决方案 > 准确的 AWK 数组搜索

问题描述

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

我需要在“sample.txt”文件中搜索“combinations”文件中的所有 6 个数组元素。但是,我需要从每个字符进行搜索,而不是像普通的文本编辑器搜索框类型搜索那样,在每次出现后按块搜索。我需要以最紧凑的方式进行搜索,以便每次发生时都能准确显示。例如,我需要在字符串“AAAAA”中找到组合“AAA”发生 3 次而不是 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 输出所需的输出?不能感谢你。

标签: arraysbashawk

解决方案


你可以试试这个:

$ 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

推荐阅读