carregando um arquivo em um array, processando o segundo arquivo usando os dados no aray

2

Eu estou em um ambiente cygwin no Windows 7. Estou executando um awkscript existente com o comando:

awk -f awkscript datafile.txt

O awkscript lê & processa dados em datafile.txt e um dos campos em datafile.txt é um código.

Exemplo: f1|f2|f3|f4

... onde o valor f2 é um código

Eu poderia codificar o código e sua descrição no awkscript em uma matriz em uma função e imprimir a descrição quando estou processando, mas isso para mim é uma maneira desleixada.

Um exemplo dos dados com o código & A descrição é a seguinte:

111|Description of 111
222|Description of 222
333|Description of 333

... onde 111 é o código e quero imprimir "Descrição de 111" Vou chamar esse arquivo code-descr.txt

Desde o arquivo acima com o código & descrição nunca vai mudar Eu gostaria de executar o awkscript e tê-lo lido code-descr.txt em um array.

Como adiciono isso à linha de comando: awk -f awkscript datafile.txt ? Se eu não precisar adicionar nada à linha de comando, como eu sempre leio code-descr.txt em uma matriz quando eu executo: awk -f awkscript datafile.txt ?

    
por newawkusr 12.09.2016 / 16:29

1 resposta

4

tente

awk 'BEGIN { FS="|"} 
     FILENAME=="code-desc.txt" { descr[$1]=$2 ; next }
      { for(i=1;i<=FS;i++) printf "%s|",descr[$i] ; printf "\n" ;} '  code-desc.txt datafile.txt

onde

  • BEGIN { FS="|"} diz ao awk para usar | como separador
  • FILENAME=="code-desc.txt" { descr[$1]=$2 ; next } ao analisar code-desc.txt, construir matriz.
  • para todas as outras linhas, imprima a descrição do campo.

observe:

  • respeita a ordem do arquivo (code-desc.txt antes do arquivo de dados.txt),
  • O
  • código entre aspas simples pode ser colocado em um script awk,
  • isso não funcionará se você tiver um código errado.
por 12.09.2016 / 16:55