Предположим, что строки, начинающиеся с буквы, являются комментариями или игнорируются.
zcat vcf.gz | awk \
'BEGIN {
RS = "[\t\v\f ]*(\r\n|\n\r|\r|\n)" ;
FS = "[\t\v\f ]+"
}
/^[A-Za-z]/ {
next
}
NF >= 4 {
key = $4 ;
sub(/:.*$/, "", key) ;
seen[key]++
}
END {
for (key in seen)
printf "%s\n", key
}'
Вы можете написать всю команду на одной строке (при этом удалите \
в конце первой строки), потому что я добавил все необходимые для этого точки с запятой.
Правило BEGIN
устанавливает универсальную поддержку новой строки. Все пробельные символы в конце строк игнорируются, и любая форма новой строки (CR, LF, CRLF, LFCR) принимается как новая строка. Любое количество табуляций или пробелов рассматривается как разделители полей.
Правило /^[A-Za-z]/
применяется ко всем строкам, начинающимся с буквы. Правило next
заставляет их игнорировать.
Следующее правило применяется ко всем записям (строкам), имеющим как минимум четыре поля. Четвертое поле копируется в переменную key
, затем удаляется все, что находится после первого двоеточия (включая двоеточие). Полученное значение мы используем в качестве ключа ассоциативного массива seen
. Значение, которое мы присваиваем, не имеет значения, но здесь seen[key]
будет содержать количество раз, когда каждое значение было упомянуто (1 или более).
Правило END
выполняется после обработки всех входных данных. Здесь цикл выполняет итерации по ключам массива seen[]
(в неуказанном порядке) и просто печатает ключи.
Если вы хотите сохранить порядок в данных или использовать какой-то определенный порядок для ключей, то приведенный выше фрагмент нуждается в небольших изменениях.
Если в двоичном файле для incrontab (который я не знаю, никогда не использовал) не установлен бит SGID, это может вызвать странное поведение такого типа.
Установите его с помощью chmod g + s / path / to / binary
(/ usr / bin / incrontab, возможно?)
Вы можете проверить, установлено ли оно с помощью:
ls -l / path / to / binary
(пример)
ls -l /usr/bin/crontab
-rwxr-s--x 1 root crontab 44336 Jun 23 18:47 /usr/bin/crontab
Я столкнулся с похожей проблемой (, вот как я нашел этот вопрос ).
Если следующая команда работает,
incrontab -n
проблема может заключаться в том, что служба incron/incrond не запущена. Проверьте, работает ли он и включен ли он для запуска при загрузке (в случае перезапуска системы ).
Другая проблема, с которой я столкнулся, была связана с бесконечным циклом, который я случайно создал.
Если ваш скрипт изменяет какой-либо файл в той самой папке, за которой наблюдает incron, он продолжает запускать события, и каждое событие вызывает новый процесс (черезfork()
). Вскоре сервис больше не сможет разветвляться. Журнал обслуживания показывает следующую ошибку в этом случае.
cannot fork process: resource temporarily unavailable
В этот момент