mesclando dois arquivos de acordo com a linha especificada

2

Eu tenho file1.txt da seguinte forma:

search
http://google.com
mail
https://gmail.com

file2.txt tem esta aparência:

This is a search tool
This is your mail account

Eu preciso mesclá-los da maneira que file1.txt se parece com isso:

This is a search tool
http://google.com
This is your mail account
https://gmail.com
    
por Martin 25.08.2018 / 11:54

2 respostas

0

Usando awk :

awk 'NR==FNR{ (NR%2? keyword=$0: seen[keyword]=$0 ); next}  
     { for (keys in seen)if ($0 ~ keys) {print $0, seen[keys] }
}' OFS='\n' file1  file2

A saída é:

This is a search tool
http://google.com
This is your mail account
https://gmail.com

explicação:

se for o primeiro arquivo NR==FNR e o número de registro / linha for igual NR%2 mantenha a linha $0 inteira na variável chamada keyword else adicione essa linha em uma matriz associada chamada seen com a palavra-chave encontrada como é o índice, depois leia a linha next .

... assim que o primeiro arquivo prosseguir, com for-loop estamos percorrendo a matriz vista e a variável keys usada para apontar para os elementos dos índices dessa matriz e verificando se keys pode corresponde nas linhas em file2 then print $0 que o sinal seguido pelo valor das suas chaves por seen[keys] separado por \n ewline.

    
por 25.08.2018 / 12:53
0

Tente também

awk '
NR == FNR   {T[$0]
             next
            }
            {for (t in T) if (t ~ $1) $1 = t
            }
1
' file2 file1
This is a search tool
http://google.com
This is your mail account
https://gmail.com
    
por 26.08.2018 / 14:24