Regex, perl, sed… inúmeras são as ferramentas utilizadas para manusear textos e padrões. Achá-los, substituí-los, etc.
Aqui, vamos para um caso bem simples mais que pode ser bastante comum entre aqueles que precisam manusear arquivos tabulados/com colunas e informações.
O Problema: Imagine que você tem dois arquivos, arq1 e arq2. Em arq1 você possui duas colunas, veja abaixo.
arq1
POS NOME
123 ABC
345 DEF
78 EF
arq2
IDX POS FST
21 123 1
23 345 1
23 345 0
23 123 1
34 345 1
Agora, o que você precisa fazer é que nas posições do arq2 seja acrescentada uma nova coluna com a informação do nome destas posições. Como fazer isso? AWK é a resposta :).
awk 'NR==FNR{a[$1]=$2;next}{$4=a[$2];}1' f1 f2
Explicando o comando…
- NR==FNR, permite que o AWK percorra cada arquivo por vez/ou melhor um de cada vez.
- a é um vetor gerado na hora que o primeiro arquivo é percorrido. Nesse caso, criamos um vetor associativo, onde a[$1] = $2, lê-se, a com chave $1 recebe valor $2 do primeiro arquivo. Trocando em miúdos, seria como a[34] = ‘CD’, etc.
- next permite que ele passe o resto do bloco
- {$4=a[$2], basicamente diz que a coluna $4, que não existe no arquivo 2, mas será criada, deve ser preenchida com o conteúdo do array associativo da coluna 2 do arquivo 2 usando o array associativo criado com arq1. Ou seja, a[123] = AB , e assim por diante.
- o 1 no }1 , diz ao awk para printar a linha.
Como resultado final, obtém-se:
IDX POS FST NAME
21 123 1 ABC
23 345 1 DEF
23 345 0 DEF
23 123 1 ABC
34 345 1 DEF
:)! Espero que seja útil.
