LINUX.ORG.RU

jq update value json

 ,


0

1
jq -r '.[] | [.name, .ip, .status, .date, .report] | @tsv' $task_file | \
	while IFS=$'\t' read -r name ip status date; do
        printf "$name\t$ip\t$status\t$date\t$report_patch\n"
	done | jq --raw-input --slurp 'split("\n") | map(split("\t")) | .[0:-1] | map( { "name": .[0], "ip": .[1], "status": .[2], "date": .[3], "report": .[4] } )' > task.json
mv task.json $task_file

Необходимо после обработки json файла, изменять его новыми значениями. Думал решить данную проблему, через временный файл, но $task_file автоматически обновляется каждые 4 сек. Выходит что пока цикл завершится, в $task_file добавятся новые значение для обработки, но цикл их не увидит!


Ответ на: комментарий от anonymous

Причем здесь наблюдения? я прошу помочь, как перезаписать json файл

vesta
() автор топика

автоматически обновляется каждые 4 сек

Ну и это долго? Ваш скрипт не успевает выполниться?

Зачем замена "сырого" файла обработанным? Не проще ли в начале читать все сырые данные, обнулять файл, обрабатывать данные, складывать обработанные данные в отдельный файл, и запускать все это заново?

anonymous
()

Значит нужно притормозить второй процесс, пишущий в файл. Иначе ты рано или поздно потеряешь данные или вообще испортишь файл.

legolegs ★★★★★
()
Ответ на: комментарий от vesta

Это я понял, я спрашиваю зачем вы его заменяете обработанными данными. Это вообще довольно стремно, потому что рано или поздно вы отхватите проблем с тем что у вас какой-нибудь участник процесса вовремя не выпустит дескриптор и покорапчит этот файл, а обнаруживается это обычно когда бэкапов под рукой нет, а данные нужны вот прям сейчас.

И кстати, как бы вам может использовать rsyslog\logstash\filebeat или что-то подобное, что заточено под чтение постоянно обновляемого файла и дальнейшую обработку этих данных?

anonymous
()
Ответ на: комментарий от anonymous

а обнаруживается это

А может быть и не обнаруживается, а мусор идет кастомерам, которые охреневают, но молчат.

legolegs ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.