|
From: | Carlos Alberto Teixeira Magalhães |
Subject: | Re: [shell-script] Explicação com Comando AWK |
Date: | Tue, 14 Apr 2015 13:06:48 -0300 |
vamos lavc tem dois comandos:FNR==NR {a[$2]=$3;next}
{print $0,a[$2]?a[$2]:"NA"}
o primeiro tem uma mutreta do FNR == NR junto com next, basicamente diz ( no primeiro arquivo faça isso )isso no caso é guardar no hash a o par: chave $2 e valor $3o segundo bloco vai ser executado, graças a mutreta anterior, só no segundo arquivo. basicamente vc procura saber se existe a chave $2 no hash a e se sim, imprime o valor, caso contrario imprime NA.no caso vc quer que nas linhas que tenham rs1 vc adicione Pascal na ultima linha, e nas linhas com rs4 vc quer Albinomi, caso contrario NAqual é a mutreta do FNR == NR ?NR é o numero do registro que o AWK esta lendo no momento. Nesse caso o AWK esta lendo cada linha como sendo um registro, assim NR vai ser 1 na primeira linha lida, 2 na segunda, etc.FNR é parecido porem ele é reiniciado a cada arquivo. assim no primeiro arquivo, FNR é igual a NR, no segundo arquivo eles serão diferentes.vc poderia fazerFNR==NR {a[$2]=$3 }
FNR!=NR {print $0,a[$2]?a[$2]:"NA"}
que daria no mesmo, entretanto foi usada a mutreta do next. next diz: leia a proxima linha fazendo TUDO de novo.assim vc garantiu queFNR==NR {a[$2]=$3;next}
foi executado APENAS no primeiro arquivo e{print $0,a[$2]?a[$2]:"NA"}
apenas no segundo arquivo.no mais o operador $ pega o valor do campo corrente, no registro corrente e $0 representa o registro inteiro.barbada né?--2015-04-14 16:13 GMT+02:00 Carlos Alberto Teixeira Magalhães address@hidden [shell-script] <address@hidden>:Bom dia a todos.Procurando sobre formas de manipular dois arquivos via AWK, encontrei o link (http://goo.gl/I7LBIX) que possui o exemplo abaixo:> cat temp1 1 rs1 AA 10 1 rs2 DD 20 1 rs3 EE 30 1 rs4 RR 40 > cat temp2 1 rs1 Pascal 1 rs4 Albinoni > awk 'FNR==NR{a[$2]=$3;next}{print $0,a[$2]?a[$2]:"NA"}' temp2 temp1 1 rs1 AA 10 Pascal 1 rs2 DD 20 NA 1 rs3 EE 30 NA 1 rs4 RR 40 Albinoni
Alguém poderia explicar o funcionamento do comando em negrito? Eu compreendo que o primeiro par de chaves indica o tratamento com a primeria entrada (arquivo temp2) e o segundo par de chaves indica o tratamento com a segunda entrada (arquivo temp1). a é um vetor mas não entendi a manipulação que é feita com ele.Desde já, agradeço.--Carlos Alberto Teixeira Magalhães
Analista de Suporte IIIDepartamento de Informática - DIUniversidade Estadual do Ceará - UECE
A aplicação pediu: "Requires Windows XP, Vista, 7 or better". Então eu instalei Linux.A Ciência da Computação nasceu para resolver problemas que não existiriam se não fosse o computador.--Carlos Alberto Teixeira Magalhães
Analista de Suporte IIIDepartamento de Informática - DIUniversidade Estadual do Ceará - UECE
A aplicação pediu: "Requires Windows XP, Vista, 7 or better". Então eu instalei Linux.A Ciência da Computação nasceu para resolver problemas que não existiriam se não fosse o computador.
[Prev in Thread] Current Thread [Next in Thread]
- Explicação com Comando AWK, Carlos Alberto Teixeira Magalhães, 2015/04/14
- Re: [shell-script] Explicação com Comando AWK, Tiago Peczenyj, 2015/04/14
- Re: [shell-script] Explicação com Comando AWK, Carlos Alberto Teixeira Magalhães <=
- Prev by Date: Re: [shell-script] Explicação com Comando AWK
- Next by Date: shell script e tar
- Previous by thread: Re: [shell-script] Explicação com Comando AWK
- Next by thread: shell script e tar
- Index(es):