
У меня есть скрипт, который выдает следующую ошибку. Кто-нибудь может отследить, я застрял на ней уже 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
скрипт. Это не сработает. У вас есть два варианта:
Запустите его как скрипт 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
чтобы оно вас не смущало. Компьютеру все равно, он просто для вас.Преобразуйте его в скрипт оболочки, который запускает
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