Como substituo os tokens de um arquivo por dados de outro?

2

Estou usando o Amazon Linux com o bash shell. Eu tenho um arquivo com dados delimitados por vírgula, onde cada linha se parece com isso

2049,576804C7DF554416A9EA25B2A5A81514,X,

Então eu tenho um segundo arquivo, com dados delimitados por vírgulas, no qual cada linha se parece com isso

id,user_name,user_email

Cada linha no segundo arquivo será única. A minha pergunta é: como faço para obter cada linha do primeiro arquivo e substituir o segundo símbolo por dados correspondentes (com base na correspondência do segundo símbolo do primeiro arquivo com o primeiro token do segundo arquivo) do segundo arquivo? Então, por exemplo, o penhor que eu listei acima se tornaria

2049,576804C7DF554416A9EA25B2A5A81514,username1,email1,X,

Assumindo que "576804C7DF554416A9EA25B2A5A81514" poderia estar localizado no segundo arquivo.

    
por Dave 23.01.2017 / 22:10

1 resposta

1

Algo parecido com o script a seguir, usando gawk

#!/bin/bash
gawk -F, 'tbl[$1]!=""{$2=tbl[$1];OFS=",";print;next}{tbl[$1]=$2;}' $1 $2

Você passa os dois arquivos primeiro com o arquivo de token. Isto assume que o primeiro arquivo não tem nenhuma repetição, e se o segundo arquivo tiver alguma linha extra, onde o primeiro campo não tem uma correspondência no primeiro arquivo, então essas linhas são omitidas da saída.

O programa gawk constrói a matriz associativa tbl , indexada pelo primeiro campo, a partir do primeiro arquivo, depois usa isso para substituir o segundo campo do segundo arquivo, depois imprime as linhas com substituições e usando " "como separador de campo. Veja man gawk para mais detalhes.

    
por 23.01.2017 / 23:11