Если ваш jq
имеет функцию inputs
и предполагает, что {#PROCNAME}
— это просто строка, вы можете использовать следующую:
ps axho comm --sort -rss | head -5 | jq -Rn '{data: [inputs|{"#PROCNAME":.}]}'
Функции inputs
позволяют jq
считывать всю входную строку. Остальное украшение для получения желаемого формата.
Опция -R
получает на вход необработанную строку. Опция -n
передает ввод jq
с записью null
. Таким образом, inputs
получает все строки сразу.
Нам нужно преобразовать "$log"
в массив, содержащий коммиты. Разделение должно быть выполнено на основе многосимвольной строки -, поэтому IFS=
здесь не поможет.
log=$(svn log -r 9:11)
... Something here to split "$log" into an array of commits...
for commit in "${commits[@]}"; do
parse "$commit"
done
Это разделение основано на этом ответе и может выглядеть так:
delimiter='------------------------------------------------------------------------'
export -a commits
while [ "$log" != "${log#*$delimiter}" ]; do
part="${log%%$delimiter*}"
part="${part##$'\n'}"
commits+=("${part%%$'\n'}")
log="${log#*$delimiter}"
done
Где:
"${log#*$delimiter}"
удаляет все до (включая )первый разделитель "${log%%$delimiter*}"
извлекает все до (, кроме )следующего разделителя "${part##$'\n'}"
удаляет начальный \n
, который был в конце разделителя "${part%%$'\n'}"
удаляет трейлинг \n
, который был в конце сообщения