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

В ksh:

zip /another/directory/files_without_extension.zip !(*.*)

В bash запустите shopt -s extglob, затем команду выше. В zsh запустите setopt ksh_glob, затем указанную выше команду или альтернативно

setopt extended_glob
zip /another/directory/files_without_extension.zip ^*.*
0
28.04.2017, 16:55
2 ответа

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

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

     #!/bin/awk -f
    BEGIN{FS=OFS="|"} NR==FNR{$1="";++a[$0];следующий} {field1=$1;$1=""; если ( !(a[$0])) {$1=field1;print $0} }
     

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

     ./bb.sh /home/path/a.txt /home/path/b .txt > /home/путь/c.txt
     

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

  2. Преобразуйте его в сценарий оболочки, который запускает команду awk:

     #!/bin/sh
    awk 'BEGIN{FS=OFS="|"} NR==FNR{$1="";++a[$0];следующий} {field1=$1;$1=""; if ( !(a[$0])) ) {$1=field1;print $0} }' /home/path/a.txt /home/path/b.txt > /home/path/c.txt
     
1
28.01.2020, 02:19

В сценарии отсутствует 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
3
28.01.2020, 02:19

Теги

Похожие вопросы