Подсчет количества столбцов ниже значения для каждой строки

Конечно, редактирование модуля systemd — не лучшая практика. Вот как мы должны идти:

sudo systemctl edit opendkim

и вставьте:

[Service]
ExecStart=
ExecStart=/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/spool/postfix/opendkim/opendkim.sock

(обратите внимание на двойной ExecStart -это не опечатка)

1
14.08.2019, 01:42
3 ответа

Количество полей в записи (пробелы -столбцы с разделителями в строке, по умолчанию )равно NF. Вы можете перебрать все поля в записи с помощью for (i = 1; i <= NF; ++i). Данные в поле iбудут доступны в $iвнутри цикла. Например:

awk '{ count = 0; for (i = 1; i <= NF; ++i) if ($i < 5) ++count; print count }'

или, написав более подробно,

awk '
    {
        count = 0

        for (i = 1; i <= NF; ++i)
            if ($i < 5)
                ++count

        print count
    }'

Поскольку тела операторов ifи forпредставляют собой только один оператор, в {... }не требуется дополнительной оболочки (, как в языке программирования C, но в отличие от Perl ). ;в конце строк не требуется, если только для отделения одного оператора от другого в той же строке (не сравните использование ;в двух эквивалентных фрагментах кода выше, например ).

2
27.01.2020, 23:17

Альтернативный вариант, использующий Perl:

perl -alpe '$_ = grep { $_ < 5 } @F' file

Скалярное присвоение результата grep превращает его в количество совпадающих элементов.

2
27.01.2020, 23:17

Проведите ввод через trи замените все дефисы символами подчеркивания, которые используются для распознавания отрицательного числа с помощьюdc:

$ tr \- _ < inp.txt |
  dc -e '
  [q]sq
  [lN1+sN]sa
  [5>az0<b]sb
  [?z0=q0sNlbxlNpcz0=c]sc
  lcx
 '
0
27.01.2020, 23:17

Теги

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