[英]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.