#awk #jq
#awk #jq
Вопрос:
У меня есть файл с несколькими строками в следующем json
формате, который я хочу передать по каналу jq
, чтобы извлечь несколько полей.
Формат является,
{"userData":[{"user":{"loginName":"TEST",....]}.
{"userData":[{"user":{"loginName":"TEST1",....]}.
....
представляет «некоторые» json
данные.
Я могу извлечь строки с помощью awk '/{"userData"/{p=1}; p; /}./{p=0};'
, которые, кажется, печатаются просто отлично.
Трудность, с которой я сталкиваюсь, заключается в том, чтобы выполнить jq
для каждой из строк и извлечь json
поля. Как этого добиться с помощью одной awk
команды?
Комментарии:
1. Существует ли буквально точка в конце каждого объекта (и строки)?
2. @JeffMercado есть. Чтобы дать вам некоторую предысторию, это некоторые данные документа из API-интерфейсов elastic search.
Ответ №1:
Содержимое этого файла не является чисто json, если эти точки действительно присутствуют в конце строк. Если каждая строка в этом файле представляет собой отдельный объект json, за которым сразу следует точка, вы можете прочитать файл в формате raw (который передает в качестве входных данных каждую строку в файле в виде строки), удалить точку, затем проанализировать json и обработать как обычно.
Например, удаление всех имен входа пользователя:
$ jq -R '.[:-1] | fromjson | .userData[].user.loginName' input.txt