gawk em vários arquivos no bash

0

Estou executando este comando em um prompt de comando

gawk -f comparefirstandsecond.awk First.out Second.out

Eu quero fazer isso no bash shell script e estou tentando assim:

compareAwkOut=$(cat  $diffedRowFromFirstFile | cat $diffedRowFromSecondFile | gawk -f $COMPARE_AWK_SCRIPT)

Onde $ diffedRowFromFirstFile | cat $ diffedRowFromSecondFile são variáveis que contêm o nome do arquivo com o caminho completo.

Mas isso não funciona, já que meu script Awk está procurando os nomes reais do arquivo para processar e ele precisa processar os dois arquivos de uma só vez, para que a matriz que eu crie no processamento do primeiro arquivo exista e eu pode compará-lo com o conteúdo do segundo arquivo.

comparefirstandsecond.awk é assim:

BEGIN {
  FS=","
}

FILENAME~/^First.out$/ && /^[0-9a-zA-Z]*^^/,/^$/ {
  if ( FILENAME~/Second.out/){
        print "Second.out comes in here as well WHY ? it should not ... "
  }else
    {
        print FILENAME;
        for (i=1;i<=NF;i++) {  
         firstValues[i]=$i
        }
    }
}

FILENAME~/^Second.out$/ && /^[0-9a-zA-Z]*^^/,/^$/ {
  print FILENAME;
  #First.out does not come as it is already processed above
  for (j=1;j<=NF;j++) {
    secondValues[j]=$j
  }

}
END {
  printf "END\n";
  #done something with both arrays for each values like 
  #  for (x in firstValues) {
#    printf("On count %s First  %s and Second %s \n",x,firstValues[x],secondValues[x])
    #if (firstValues[x]!=secondValues[x]) { }
}
}

Se eu cat-los, os nomes dos arquivos são perdidos, eu acho. É apenas um dado enviado para o gawk reunido de ambos os arquivos.

    
por sarmahdi 23.03.2017 / 08:36

1 resposta

0

Para capturar a saída do comando gawk e executar o comando com nomes de arquivos armazenados nas variáveis, basta fazer:

compareAwkOut=$(gawk -f $COMPARE_AWK_SCRIPT $filename1 $filename2)

Não ficou claro na sua pergunta, mas se os nomes dos arquivos forem armazenados em um arquivo chamado nas variáveis, isso pode ser o que você precisa:

filename1=$(cat $diffedRowFromFirstFile)
filename2=$(cat $diffedRowFromSecondFile)
    
por 23.03.2017 / 08:49