Собрать каждые n строк из файла

Я не могу дать полное решение, потому что вообще не использую sudo. Вы должны экспортировать DISPLAY и XAUTHORITY перед запуском xclock от имени user1.

su -l user1 -c 'export DISPLAY=:0.0;XAUTHORITY=/home/user1/XAUTHORITY;xclock&'

Обратите внимание, что это ненадежное решение, поскольку DISPLAY и XAUTHORITY не всегда совпадают.

0
09.12.2020, 07:33
1 ответ

Я бы предложил комбинацию awkдля разделения и отдельный inotifywaitпросмотр вашего каталога "исходящих данных". Например. создайте каталог с именем «исходящий», и всякий раз, когда появится новый файл, мы будем его отправлять.

Сценарий 1:Разбиение по awkкаждой 10-й строки и запись в новый файл "bufferX" с увеличением числа X -адаптируйте по мере необходимости.

$cat split.awk

NR%10==1 {buffer="buffer"++i}

{
print > buffer
if (NR%%10==0) {system("mv "buffer" outgoing/")}
}

Сценарий 2:Отслеживание исходящего каталога и отправка данных всякий раз, когда появляется новый пакет журнала. Я просто предположил, что вы используете curlдля отправки -.

$cat watch_dir.sh

#!/bin/bash
inotifywait -m -o watch.logs -e moved_to --format '%w%f' outgoing/  |\
while read bufferfile
do
    curl -T ${bufferfile} http://taget.url && rm ${bufferfile}
done

Здесь inotifywaitнаблюдает за "исходящим" каталогом в поисках -eсброса файла moved_toон работает неопределенно долго с -mрежимом onitor, l -ogs в "watch.logs" и печатает обнаруженный файл в --formatс указанием пути и имени файла. Эту последнюю часть мы читаем для команды curlи удаляем файл после загрузки.

Создайте исходящий каталог, затем запустите:

bash watchdir.sh & <your_command_creating_output> | awk -f split.awk
0
18.03.2021, 22:44

Теги

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