Как назначить входной параметр для функции, включая awk?

Я делаю несколько ярлыков для своей учетной записи в вычислительном кластере. Когда я отправляю работу, система присваивает мой расчет идентификатору работы (JOBID). Чтобы перечислить все мои вычисления, я создал псевдоним

alias j="queue -u myuser-ID"

, который выдает результат, похожий на

         JOBID     NAME     USER     ST       TIME 
      13716868   job_samp   myuserid  R    2:02:55     

Затем система создает временный каталог с именем job.JOBID, в котором выходные файлы хранятся. Чтобы добраться до этого каталога, я написал функцию:

jj() { cd ~/many/many/files/job."$1"; }

, которая переводит меня во временный файл с помощью команды «job JOBID». Чтобы сохранить еще несколько нажатий клавиш, я хочу написать другую функцию, которая берет указанный JOBID по моему псевдониму «j» и переносит меня во временный файл. Когда у меня есть только одна работа, работает следующая функция

tt() { r=$(j | awk 'FNR>=2&&NR {print $1}'); jj $r; }

, и команда 'tt' переносит меня в этот файл. Однако, если у меня есть более одного вычисления (что в большинстве случаев), последняя функция бесполезна, поскольку она всегда приведет меня к первой работе в списке. Я пытаюсь назначить переменную биту FNR функции 'tt', чтобы при вводе, скажем, 'tt 3', я попадал в каталог третьего задания. Я попытался использовать опцию -v, как в

tt() { r=$(j | awk -v 'FNR=$2&&NR {print $1}'); jj $r; }

, но я получаю сообщение о том, что 'FNR' не является подходящей переменной. Как я могу сделать эту работу?

Заранее спасибо!

0
задан 1 August 2019 в 22:58

1 ответ

Awkk -v аргумент берет a name=value пара, позволяя Вам использовать name как переменная в Вашей awk программе. Так

tt() { r=$(j | awk -v id="$2" 'FNR=id && NR {print $1}'); jj $r; }

(TBH я не уверен почему && NR необходимо здесь, или почему Вы различаете NR и FNR когда Вы только передаете единственный вход (stdin) awk.)

1
ответ дан 23 October 2019 в 07:50

Другие вопросы по тегам:

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