bash :Разделить журнал на части, которые можно анализировать

Если ваш jqимеет функцию inputsи предполагает, что {#PROCNAME}— это просто строка, вы можете использовать следующую:

ps axho comm --sort -rss | head -5 | jq -Rn '{data: [inputs|{"#PROCNAME":.}]}'

Функции inputsпозволяют jqсчитывать всю входную строку. Остальное украшение для получения желаемого формата.

Опция -Rполучает на вход необработанную строку. Опция -nпередает ввод jqс записью null. Таким образом, inputsполучает все строки сразу.

0
08.04.2021, 12:57
1 ответ

Нам нужно преобразовать "$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, который был в конце сообщения
1
28.04.2021, 22:53

Теги

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