Я бы использовал текстовую утилиту для обработки text вместо использования цикла оболочки для обработки текста (хотя здесь IFS = '|'
хорошо адаптирован к вашему случаю). Как:
awk -F ' *[|] *' '
NF == 3 {host[$2"."$3] = host[$2"."$3] $1 "\n"}
END{for (i in host) print "[" i "]\n" host[i]}' < file
Обратите внимание, что порядок записей не гарантируется. В GNU awk
добавьте BEGIN {PROCINFO ["sorted_in"] = "@ind_str_asc"}
для сортировки по ключам.
В зависимости от того, какую СУБД вы используете, вы также можете настроить отображение этого в правильном формате (например, используя GROUP_CONCAT
в mysql
или string_agg
в postgre ).
Для начала, вы также могли бы попросить вашу утилиту запросов RDBMS отформатировать вывод в формате, более подходящем для постобработки (например, убрать верхние и нижние колонтитулы и использовать значения, разделенные табуляцией).
На основе вопросов и ответов AU под названием:Как исправить ошибку «Не удается получить доступ к папке Dropbox»? похоже, вы можете попробовать их, чтобы увидеть, решат ли они вашу проблему:
$ sudo sysctl fs.inotify.max_user_instances=256
$ sudo sysctl fs.inotify.max_user_watches=1048576
Если вы обнаружите, что это решает проблему, вы можете сделать их постоянными. Добавьте в этот файл следующее:
$ cat /etc/sysctl.d/99-dropbox.conf
fs.inotify.max_user_watches = 1048576
fs.inotify.max_user_instances = 256
Затем запустите это, чтобы получить изменения:
$ sudo sysctl -p