Конечно, редактирование модуля 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 -это не опечатка)
Количество полей в записи (пробелы -столбцы с разделителями в строке, по умолчанию )равно 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 ). ;
в конце строк не требуется, если только для отделения одного оператора от другого в той же строке (не сравните использование ;
в двух эквивалентных фрагментах кода выше, например ).
Альтернативный вариант, использующий Perl:
perl -alpe '$_ = grep { $_ < 5 } @F' file
Скалярное присвоение результата grep превращает его в количество совпадающих элементов.
Проведите ввод через tr
и замените все дефисы символами подчеркивания, которые используются для распознавания отрицательного числа с помощьюdc
:
$ tr \- _ < inp.txt |
dc -e '
[q]sq
[lN1+sN]sa
[5>az0<b]sb
[?z0=q0sNlbxlNpcz0=c]sc
lcx
'