Разбор значения из разных строк JSON (без jq)

Ниже представлена ​​awkпрограмма. Вы можете поиграть со столбцом и порогом, указанным в аргументах :

.
awk -v column=2 -v threshold=104 '
    function save() { if (lines != "") print lines >"file_" first "-" last ".txt" }

    ! ($column < threshold) {
        save()
        first = last = lines = ""
        next
    }

    { 
        if (first == "") first = $1
        last = $1
        lines = lines $1 OFS $column ORS
    }

    END { save() }
'

Обратите внимание, что непрерывные строки сохраняются в памяти до тех пор, пока они не будут сохранены. Если у вас есть сотни миллионов непрерывных строк, это решение следует адаптировать (, сохраняя каждую строку во временном файле, а затем переименовывая его, когда встречается последняя строка непрерывного блока ).

0
08.11.2019, 18:44
4 ответа

Ну, если я правильно вас понял, с GNU grepиtr:

tr ',' '\n' < foo | grep -Po "(?<=Content\":\").*(?=\")"

Выход:

Value1

С другим ключевым словом:

tr ',' '\n' < foo | grep -Po "(?<=database\":\").*(?=\")"

Value 3

Замените запятые на новую строку:

tr ',' '\n'

Только Grep -o-Pperl-подобное регулярное выражение

grep -Po

Захват шаблона ("<keyword>:"")<value>(")и печать только <value>.

1
28.01.2020, 03:08

jqменьше и perlменьше кувалды с использованием предназначенного ОП sed/awk

s="Content"; sed 's/[{}"]//g' file | awk -v s=$s -F ":" -v RS=',' '($1 == s) {print $2}'
1
28.01.2020, 03:08

Ладно, признаю, это ужасно...

$ awk 'BEGIN {FPAT="\"[^\"]+\""; RS=","; pat=ARGV[1]; delete ARGV[1]} 
     $1 ~ pat {print $2} '       Content ex.json
"Value1"
1
28.01.2020, 03:08
$ jq -r '.Content' file
Value1
$ jq -r '.DeviceType' file
Value4

Нет причин не устанавливать jqдля правильного, безопасного анализа JSON и без необходимости вручную расшифровывать закодированные строки JSON -и т. д.

Утилита jqдоступна для скачивания в форме, которая не требует прав суперпользователя для установки в ваш домашний каталог (без внешних зависимостей времени выполнения ).

0
15.05.2021, 20:43

Теги

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