Problema com o comando awk

0

Eu tenho um script que está lançando um erro abaixo que qualquer um pode rastrear que eu estou preso nisso por 4 horas passadas

O script contém abaixo: vi bb.sh

#!/bin/awk -f
'BEGIN{FS=OFS="|"} NR==FNR{$1="";++a[$0];next} {field1=$1;$1=""; if ( !(a[$0]) ) {$1=field1;print $0} }' /home/path/a.txt  /home/path/b.txt >  /home/path/c.txt

erro após a execução:

-bash-4.2$ sh bb.sh
bb.sh: line 2: BEGIN{FS=OFS="|"} NR==FNR{$1="";++a[$0];next} {field1=$1;$1=""; if ( !(a[$0]) ) {$1=field1} }: command not found
    
por Rak kundra 28.04.2017 / 15:51

2 respostas

3

Você está com falta de awk no script:

awk 'BEGIN{FS=OFS="|"} NR==FNR{$1="";++a[$0];next} {field1=$1;$1=""; if ( !(a[$0]) ) {$1=field1;print $0} }' \
/home/path/a.txt  /home/path/b.txt >  /home/path/c.txt

O script provavelmente também deve ter #!/bin/sh como primeira linha.

Como alternativa, você converterá o script em um script awk adequado:

#!/usr/bin/awk -f

BEGIN {FS = OFS = "|"} 

NR==FNR { $1="";++a[$0]; next }

{
  field1 = $1;
  $1 = ""; 
  if ( !(a[$0]) ) {
     $1 = field1;
     print $0;
  }
}

... e depois executá-lo com, por exemplo,

$ ./bb.awk /home/path/a.txt /home/path/b.txt >/home/path/c.txt
    
por 28.04.2017 / 16:03
1

Você tem um script awk , mas está tentando executá-lo como um script sh . Isso não vai funcionar. Você tem duas escolhas:

  1. Execute-o como um script awk. Como seu arquivo já possui uma linha shebang ( #!/bin/awk -f ), apenas remova as aspas e os arquivos de entrada:

    #!/bin/awk -f
    BEGIN{FS=OFS="|"} NR==FNR{$1="";++a[$0];next} {field1=$1;$1=""; if ( !(a[$0]) ) {$1=field1;print $0} }
    

    Em seguida, torne-o executável ( chmod a+x bb.sh ) e execute-o:

    ./bb.sh  /home/path/a.txt  /home/path/b.txt >  /home/path/c.txt
    

    Você também pode querer remover a extensão .sh ou renomeá-la para .awk para não confundir você. O computador não vai se importar, isso é só para você.

  2. Converta-o em um script de shell que execute o comando awk :

    #!/bin/sh
    awk 'BEGIN{FS=OFS="|"} NR==FNR{$1="";++a[$0];next} {field1=$1;$1=""; if ( !(a[$0]) ) {$1=field1;print $0} }' /home/path/a.txt  /home/path/b.txt >  /home/path/c.txt
    
por 28.04.2017 / 16:16

Tags