Передача переменных в скрипт awk с помощью пары команд awk - PullRequest
0 голосов
/ 14 июня 2019

Я очень новичок в awk, поэтому извиняюсь за этот вопрос.

Я создал скрипт с большим количеством команд awk (назвал его "myscript.awk", например:

awk -v f=5 -v t=62 '{ for (i=f; i<=t;i++) printf("%s%s", $i,(i==t) ? "\n" : OFS = "\t") }' myfiles > testa3.maf
awk -v f=1 -v t=4 '{ for (i=f; i<=t;i++) printf("%s%s", $i,(i==t) ? "\n" : OFS = "\t") }' myfiles > testa4.maf
paste testa3.maf testa4.maf > myfiles.txt

Это только пример, но в реальном скрипте также есть много других команд awk. Теперь я хочу передать это тысячам файлов, поэтому он применяет эти команды ко всем файлам.

I 'мы попытались присвоить мой файл переменной (как я показал в сценарии как myfile) и запустили так:

awk -v myfiles="test.maf" -f myscript.awk

Но я получаю синтаксическую ошибку. Я, должно быть, что-то делаю очень неправильно!

Спасибо

1 Ответ

0 голосов
/ 14 июня 2019

Вы должны отличать скрипт оболочки от скрипта awk.В вашем случае

awk -v f=1 -v t=4 '{ for (i=f; i<=t;i++) printf("%s%s", $i,(i==t) ? "\n" : OFS = "\t") }' testa.maf > testa4.maf

- это команда оболочки.Три команды, которые вы отправили, являются сценарием оболочки.Это сценарий awk, который выполняет вышеуказанный сценарий оболочки:

{ for (i=f; i<=t;i++) printf("%s%s", $i,(i==t) ? "\n" : OFS = "\t") }

Если вы назвали этот сценарий script.awk.Вы можете выполнить это, используя awk -v f=1 -v t=4 -f script.awk.Сценарии оболочки не выполняются awk, но (как правило) sh или bash.

Сценарии оболочки также могут иметь переменные, но они функционируют иначе, чем переменные awk.В частности, если вы хотите, чтобы в этом сценарии оболочки была переменная для выходного файла, вы можете сделать это:

file="$1"
awk -v f=5 -v t=62 '{ for (i=f; i<=t;i++) printf("%s%s", $i,(i==t) ? "\n" : OFS = "\t") }' $file > testa3.maf
awk -v f=1 -v t=4 '{ for (i=f; i<=t;i++) printf("%s%s", $i,(i==t) ? "\n" : OFS = "\t") }' testa.maf > testa4.maf
paste testa3.maf testa4.maf > $file.txt

Здесь $1 - первый переданный параметр;тогда вы можете вызвать ваш скрипт:

bash script.sh test.maf
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...