Проверьте это:
Первый вариант
perl -pe 's/"characater"/"\"char". (++$n). "\""/ge' input.json |
jq -r '.frames.frame.lps.lp|.ncharacter,(.characters[]|[.code_ascii,.confidence]|@tsv)'
Пояснение
perl -pe 's/"characater"/"\"char". (++$n). "\""/ge' input.json
-p
-перебираем каждую строку и печатаем, например sed
. -e
-Может использоваться для ввода одной строки программы. Если указано -e
, Perl не будет искать имя файла в списке аргументов. s///ge
-g
:глобальная подстановка,e
:оценка правой части команды подстановки как выражения. "\"char". (++$n). "\""
-точки используются для конкатенации. jq -r '.frames.frame.lps.lp|.ncharacter,(.characters[]|[.code_ascii,.confidence]|@tsv)'
.frames.frame.lps.lp|
-его можно записать как .frames |.frame |.lps |.lp |
, поэтому он работает следующим образом :взять ввод, выбрать все frames
поля и передать их другому фильтру -.frame
, затем взять все frame
поля и передать их к следующему фильтру-.lps
и т. д. См. руководство jq , раздел Труба . |.ncharacter,(.characters[]|...)'
-jq Руководство , раздел Запятая :«Если два фильтра разделены запятой, то один и тот же вход будет подаваться в оба, а выходные потоки значений двух фильтров будут сначала объединяются в порядке :, все выходные данные, полученные левым выражением, а затем все выходные данные, полученные правым. Например, фильтр .foo,.bar
, создает как поля «foo», так и поля «bar» как отдельные выходы». (.characters[]|[.code_ascii,.confidence]|@tsv)
-используются для обработки вывода .characters[]
отдельно от вывода фильтра .ncharacter
. Второй вариант-с использованием gawk
вместо perl
для json
исправления файла, часть jq
такая же, как и в первом варианте:
gawk '{ORS= (RT) ? "\"char" NR "\"" : ""; print}' RS='"characater"' input.json
Обратите внимание,-команды perl
и gawk
не сбрасывают счетчик блока char
каждый кадр. То есть он начинается с char1
в начале и увеличивается до конца.
Введите-образец, повторенный три раза.
Выход
8
1 97
5 89
4 97
5 97
1 77
B 97
B 94
L 34
8
1 97
5 89
4 97
5 97
1 77
B 97
B 94
L 34
8
1 97
5 89
4 97
5 97
1 77
B 97
B 94
L 34
Перейдите в Системные настройки -> Среды рабочей области -> Эффекты рабочего стола -> Снимите флажок при масштабировании