В вашей команде опечатка:
awk -F'#' ' { if(($4+$5)/2 >90) {print $1 "|" $2 "|" $3 "|" $4 "|" $5 "|" ($4+$5)/2 }} input.txt
В конце кода awk
пропущена одинарная кавычка. Это должно выглядеть примерно так
awk -F'#' ' { if(($4+$5)/2 >90) {print $1 "|" $2 "|" $3 "|" $4 "|" $5 "|" ($4+$5)/2 }}' input.txt
Кроме того, код awk
можно было бы записать как
awk -F '#' -v OFS='|' '($4+$5)/2 > 90 { $(NF+1) = ($4+$5)/2; print }' input.txt
При этом используется OFS
для автоматического разграничения выходных полей с помощью |
, а также просто добавляется среднее значение в качестве нового поля в конце текущей записи перед ее выводом. (присвоение $(NF+1)
добавляет новый поле; NF
— количество полей в текущей записи, а $NF
— последнее поле ). Таким образом, нам не нужно упоминать каждое поле, которое мы хотим вывести.
Альтернативное awk
решение:
awk -F '#' -v OFS='|' '($(NF+1) = ($4+$5)/2) > 90' input.txt
Это устанавливает для нового последнего поля среднее значение 4-го и 5-го полей и печатает запись, если это новое поле больше 90. Это позволяет избежать двойного вычисления среднего значения и основывается на том, что print
является значением по умолчанию для . действие , если подобное условие истинно.
2>/dev/null
значит прятать голову в песок. Он не устраняет опасность, а просто скрывает ее. find
по-прежнему выходит со статусом 1, сигнализируя об ошибке. Сценарии Jenkins sh
запускаются с включенным set -e
, поэтому это немедленно останавливает сценарий оболочки.
Перед запуском проверьте, существует ли каталог. find
.
Во фрагменте ниже я сделал несколько других изменений:
dir
Дженкинса вместо cd
. find -regex
, для поиска литерала .
(, чтобы не совпадать, например.wibble.not-a-zip
). ! [ -z "$var" ]
до [ -n "$var" ]
. dir(WORKSPACE + '/' + BuildLocation) {
sh '''
if [ -d Build/ReleaseKit/Installable ]; then
var=$(find Build/ReleaseKit/Installable/ -regex "$App.*\\.zip" 2>/dev/null)
echo "$var"
if [ -n "$var" ]
then
echo "App zip found"
unzip -o Build/ReleaseKit/Installable/App-*.zip
fi
'''
}
Поскольку файл, очевидно, должен находиться внутри каталога Installable
, а не где-то глубже в подкаталоге (*), вам не нужен find
.
dir(WORKSPACE + '/' + BuildLocation) {
sh '''
set Build/ReleaseKit/Installable/"$App"*.zip
if [ -e "$1" ]; then
echo "App zip found: $1"
unzip -o "$1"
fi
'''
}
Вместо проверки существования файла в sh вы можете сделать это в Groovy с подключаемым модулем шагов утилиты Pipeline .
dir(WORKSPACE + '/' + BuildLocation) {
def zips = findFiles glob: "Build/ReleaseKit/Installable/${App}*.zip"
if (findFiles.length > 0) {
env.app_zip = zips[0]
sh 'unzip ${app_zip}'
}
}
(Все фрагменты кода не проверены.)