簡體   English   中英

准確的AWK陣列搜索

[英]Accurate AWK array searching

有人可以提供一些幫助來使AWK正確搜索嗎?

我需要在“ sample.txt”文件中搜索“組合”文件中的所有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輸出所需的輸出呢? 感激不盡。

可能會有更快的方法來找到第一個匹配項並從該索引繼續進行,但這可能更簡單

$ 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM