Thanks to visit codestin.com
Credit goes to corecode.wordpress.com

Feeds:
Posts
Comments

Archive for October, 2016

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.

 

Read Full Post »

Design a site like this with WordPress.com
Get started