
Eu tenho um script que está gerando um erro abaixo que qualquer um pode rastrear. Estou preso nisso nas últimas 4 horas
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
Responder1
Está faltando 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 awk
script 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 execute-o com, por exemplo
$ ./bb.awk /home/path/a.txt /home/path/b.txt >/home/path/c.txt
Responder2
Você tem um awk
script, mas está tentando executá-lo como um sh
script. Isso não vai funcionar. Você tem duas opções:
Execute-o como um script awk. Como seu arquivo já possui uma linha shebang (
#!/bin/awk -f
), basta remover 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 remover a
.sh
extensão ou renomeá-la para.awk
que não o confunda. O computador não vai se importar, isso está aí apenas para você.Converta-o em um script de shell que execute o
awk
comando:#!/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