Ниже представлена 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() }
'
Обратите внимание, что непрерывные строки сохраняются в памяти до тех пор, пока они не будут сохранены. Если у вас есть сотни миллионов непрерывных строк, это решение следует адаптировать (, сохраняя каждую строку во временном файле, а затем переименовывая его, когда встречается последняя строка непрерывного блока ).
Ну, если я правильно вас понял, с GNU grep
иtr
:
tr ',' '\n' < foo | grep -Po "(?<=Content\":\").*(?=\")"
Выход:
Value1
С другим ключевым словом:
tr ',' '\n' < foo | grep -Po "(?<=database\":\").*(?=\")"
Value 3
Замените запятые на новую строку:
tr ',' '\n'
Только Grep -o
-P
perl-подобное регулярное выражение
grep -Po
Захват шаблона ("<keyword>:"")<value>(")
и печать только <value>
.
jq
меньше и perl
меньше кувалды с использованием предназначенного ОП sed
/awk
s="Content"; sed 's/[{}"]//g' file | awk -v s=$s -F ":" -v RS=',' '($1 == s) {print $2}'
Ладно, признаю, это ужасно...
$ awk 'BEGIN {FPAT="\"[^\"]+\""; RS=","; pat=ARGV[1]; delete ARGV[1]}
$1 ~ pat {print $2} ' Content ex.json
"Value1"
$ jq -r '.Content' file
Value1
$ jq -r '.DeviceType' file
Value4
Нет причин не устанавливать jq
для правильного, безопасного анализа JSON и без необходимости вручную расшифровывать закодированные строки JSON -и т. д.
Утилита jq
доступна для скачивания в форме, которая не требует прав суперпользователя для установки в ваш домашний каталог (без внешних зависимостей времени выполнения ).