Eu tenho um arquivo com mais de 19.000 linhas com a seguinte estrutura:
$ head -10 a_vt
9999.77,-83.03,-7.71771771772,276.97,-7.71771771772
9999.48,-83.57,-7.23723723724,276.43,-7.23723723724
9999.08,-83.99,-7.2972972973,276.01,-7.2972972973
9998.75,-81.71,-6.996996997,278.29,-6.996996997
9998.75,-81.65,-6.996996997,278.35,-6.996996997
9998.69,-80.87,-8.7987987988,279.13,-8.7987987988
9998.34,-81.05,-8.43843843844,278.95,-8.43843843844
9997.89,-83.99,-6.21621621622,276.01,-6.21621621622
9997.77,-77.27,-16.1261261261,282.73,-16.1261261261
9997.54,-82.43,-4.29429429429,277.57,-4.29429429429
...
...
e usando este tipo de arquivo (ou seja, arquivos geralmente com um número variável de linhas):
$ cat b_vm
22850,39.78686TN,39.78686TN,-75.6259,-14.9867,284.374,-14.9867
22901.9,9.90099TN,9.90099TN,-75.649,-14.9636,284.351,-14.9636
27742.2,160.0TN,160.0TN,-75.5999,-14.9922,284.4,-14.9922
22901.9,110.0TN,110.0TN,-75.6648,-14.9526,284.335,-14.9526
9998.69,110.0TN,110.0TN,-75.6551,-14.9496,284.345,-14.9496
9998.34,100.0TN,100.0TN,-75.62949999999998,-14.9573,284.37,-14.9573
27742.2,90.0TN,90.0TN,-75.60129999999998,-14.9973,284.399,-14.9973
27685.3,90.0TN,90.0TN,-75.6024,-14.9626,284.398,-14.9626
27742.2,80.0TN,80.0TN,-75.6014,-15.0006,284.399,-15.0006
22901.9,80.0TN,80.0TN,-75.6597,-14.9626,284.34,-14.9626
o arquivo de 19 mil linhas é filtrado após corresponder aos valores da primeira coluna para obter:
$ awk 'NR==FNR { a[$1]; next }( ($1 in a) ) { print }' FS="," b_vm a_vt
9998.69,-80.87,-8.7987987988,279.13,-8.7987987988
9998.34,-81.05,-8.43843843844,278.95,-8.43843843844
Não sou um awk
especialista aqui, mas entendo que essa chamada awk de uma linha permite obter valores do cache após comparar os valores da primeira coluna em ambos os arquivos. O problema é imprimir a segunda coluna da b_vmt
seguinte forma:
9998.69,-80.87,-8.7987987988,279.13,-8.7987987988,**110.0TN**
9998.34,-81.05,-8.43843843844,278.95,-8.43843843844,**100.0TN**
Qualquer dica é muito bem vinda,
Você pode usar isto
awk
:Aqui
a[$1] = $2
armazena$2
em arraya
pelo índice$1
. E na 2ª passagem imprimimosa[$1]
para imprimir o valor armazenado após o registro completo doa_vt
arquivo.entenda que esta chamada awk de uma linha permite obter valores do cache
Isso não é verdade. Ao processar o primeiro arquivo, para cada linha que você está fazendo
a primeira parte apenas faz referência ao elemento, que pode ainda não existir. De (Guia do usuário GNU Awk
Portanto, depois de fazer isso, o valor de cada chave
a
é uma string vazia.