Как передать значения переменных в сценарий и запустить его в одну строку?

Для всех, кому интересно, я вывел решение Рафаэля в новый JSON-файл с помощью этой команды:

cat uir-index.json| jq 'select(.id|startswith("eprints.ulster.ac.uk/view/")|not )' > cleaned-uir-index.json

Формат вывода вернулся к многострочным блокам кода. Я выполнил ту же команду jq с опцией "--compact-output / -c" следующим образом:

cat uir-index.json| jq -c 'select(.id|startswith("eprints.ulster.ac.uk/view/")|not )' > cleaned-uir-index.json

Это вывело очищенный файл в формате новой строки.

0
15.04.2018, 21:39
1 ответ

qsub -v varname=valueзадает для varnameзначение value, указанное в среде отправленного задания.

В отправляемом сценарии вы используете это значение в команде grep, но строка, содержащая переменную, заключена в одинарные кавычки, что препятствует ее расширению оболочкой.

Вместо этого ваш скрипт должен использовать

grep "^$mold[[:blank:]]H" temp_4n.in | tail -1 > temp_5n.in

Начальный $в вашем коде($'...')здесь не нужен, вместо этого мы используем [[:blank:]]для соответствия пробелу или табуляции.


Альтернативой может быть использование awkв вашем скрипте:

awk -v mold="$mold" '$1 == mold && $2 == "H" { this = $0 } END { print this }' temp_4n.in >temp_5n.in

При этом используются сравнения строк (, а не регулярные выражения )для проверки первого и второго столбца, и когда совпадающая строка найдена, вся строка сохраняется в переменной this. В конце печатается последнее значение this. Это заменяет как grep, так и tail.

1
28.01.2020, 02:43

Теги

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