С помощью GNU awk
вы можете использовать }, {
в качестве разделителя записей и вывести записи, не содержащие "data_source_name":
:
gawk -v RS='}\\s*,\\s*{' '!/"data_source_name":/'
Или вы можете декодировать его как json, который, похоже, используется, например JSON: :PP
:
perl -MJSON::PP -l -0777 -ne '
$j = JSON::PP->new->relaxed->pretty;
print $j->encode($_) for grep {!defined($_->{data_source_name})}
@{$j->decode("[$_]")}' < file.json
Я бы решил эту проблему, удалив символы CR (представленные как ^ M
в выводе из cat -et
):
tr -d '\r' < CDPyPuerto.dat |
awk '{printf "%s%s", $0, (length($1) > 16) ? OFS : ORS}' > TablaCDP.dat