Как добавить значение пользовательского поля журнала в модуль bash systemd

Я был бы очень удивлен, если бы это можно было сделать в sed. Вы можете написать чистый bash-скрипт, но в awkэто довольно просто. Эта программа чем-то похожа на Кусалананды . но не использует массив.

awk -F, '
    {
        begin=$1
        prev=$1
        for (i=2; i<=NF; i++) {
                if ($i == prev+1) {
                        prev=$i
                        continue
                }
                if (begin==prev) {
                        printf "%s,",    begin
                } else {
                        printf "%s-%s,", begin, prev
                }
                begin=$i
                prev=$i
        }
        if (begin==prev) {
                printf "%s",    begin
        } else {
                printf "%s-%s", begin, prev
        }
        print ""
    }'
  • -F,устанавливает разделитель полей, поэтому мы можем рассматривать каждое число как поле.
  • begin— первое число в текущем диапазоне последовательных номеров.
  • prevвсегда является самым последним числом, которое мы просматривали. Мы могли бы просто сказать $(i-1); Я подумал, что будет понятнее дать ему имя.
  • Если текущий номер на единицу больше предыдущего, мы просто добавляем еще одно число к ряду последовательных чисел, так что запишите это и двигайтесь дальше.
  • В противном случае мы начинаем новый диапазон. Распечатайте диапазон, который мы только что закончили. Если диапазон начинается и заканчивается одним и тем же числом, просто напечатайте это число и не печатайте его дважды через дефис. Печатать запятую и без новой строки.
  • Повторите описанную выше логику в конце строки. Поскольку это последний диапазон (или число )в строке, не ставьте после него запятую; вместо этого используйте print "", чтобы напечатать новую строку.

1
20.10.2020, 11:25
0 ответов

Теги

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