Проблема с командой awk

Проблема с командой awk

У меня есть скрипт, который выдает следующую ошибку. Кто-нибудь может отследить, я застрял на ней уже 4 часа.

Скрипт содержит следующее: 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

ошибка после выполнения:

-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

решение1

Вас не хватает awkв сценарии:

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

#!/bin/shВероятно , в первой строке сценария также должно быть :

В качестве альтернативы вы преобразуете скрипт в полноценный awkскрипт:

#!/usr/bin/awk -f

BEGIN {FS = OFS = "|"} 

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

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

... а затем запустить его, например, с помощью

$ ./bb.awk /home/path/a.txt /home/path/b.txt >/home/path/c.txt

решение2

У вас есть awkскрипт, но вы пытаетесь запустить его как shскрипт. Это не сработает. У вас есть два варианта:

  1. Запустите его как скрипт awk. Поскольку в вашем файле уже есть строка shebang ( #!/bin/awk -f), просто удалите кавычки и входные файлы:

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

    Затем сделайте его исполняемым ( chmod a+x bb.sh) и запустите:

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

    Вы также можете удалить .shрасширение или переименовать его, .awkчтобы оно вас не смущало. Компьютеру все равно, он просто для вас.

  2. Преобразуйте его в скрипт оболочки, который запускает 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
    

Связанный контент