Comparar strings com charcters especializados

0

Se eu tiver uma tabela de pesquisa

cat  tmp1
[//rtwttwtr*fgg]\\erw''~ 1
^774574574565665f[[[//]\] 2
()42543^[[D^[[D^[[D^[[D^[[D353535345****@3242- 3

e um número de strings a serem pesquisadas a partir da primeira coluna da tabela de pesquisa, e ver se as strings comparadas contêm cada uma ou todas as outras (uma string é substring da outra), então volte a segunda coluna pesquisada valor.

Então, se meu segundo arquivo for

cat  tmp2
[//rtwtt
[//rtwttwtr*fgg]\\erw''~
[//rtwttwtr*fgg]\\erw''~4353535^^^7
()42543^[[D^[[D^[[D^[[D^[[D353535345****@3242--
rwerq5555525525

então minha saída desejada é

[//rtwtt 1
[//rtwttwtr*fgg]\\erw''~ 1 
[//rtwttwtr*fgg]\\erw''~4353535^^^7 1
()42543^[[D^[[D^[[D^[[D^[[D353535345****@3242-- 3
rwerq5555525525

O critério de pesquisa é a string da tabela de pesquisa ou a string de consulta é uma subseqüência da outra para a correspondência ser verdadeira.

Aqui está o que eu tentei,

awk 'NR==FNR{a[$1]=$2;next} { for(as in a) { if(($1~as) || (as~$1)) print $1,a[as]; continue}}' tmp1 tmp2

Mas estou recebendo um erro de intervalo inválido, por favor, ajude

    
por Alpesh Querer 12.05.2016 / 17:34

1 resposta

0

Tente este awk, ele não imprime o campo (rwerq5555525525) do arquivo tmp2 que não corresponde. Talvez alguns dos especialistas possam ajudar com esse detalhe.

FNR==NR {
    a[$1]=$2;
    next;
}
{
    s1=split($1,B,"")
    lineY="";
    for(j=1;j<=s1;j++)
    {
        if (B[j] ~ /[[:alnum:]]/)
        {
            lineY=lineY B[j]
        }
        else
        {
            lineY=lineY "\"B[j]
        }
    }
    for (item in a)
    {
        s=split(item,C,"");
        linex="";
        for(i=1;i<=s;i++)
        {
            if (C[i] ~ /[[:alnum:]]/)
            {
                linex=linex C[i]
            }
            else
            {
                linex=linex "\"C[i]
            }
        }
        if ((match(item,lineY)) || (match($1,linex)))
        {
            print $1" "a[item];
        }   
    }   
}

$ awk -Pf script.awk temp1.txt temp2.txt

[//rtwtt 1
[//rtwttwtr*fgg]\\erw''~ 1 
[//rtwttwtr*fgg]\\erw''~4353535^^^7 1
()42543^[[D^[[D^[[D^[[D^[[D353535345****@3242-- 3
    
por 14.05.2016 / 23:55