Использование sed / awk для извлечения нескольких строк из каждой строки - PullRequest
0 голосов
/ 01 марта 2020

У меня есть файл, который содержит 30 миллионов строк (такой большой файл)

В каждой строке у меня есть такие данные:

"title": "some title" (SOME RANDOM DATA) "rank": "1,292,064"

Мне нужно извлечь значение заголовка и значение ранга так:

some title:1,292,064

Маленькая помощь? :) Я испытал свое маленькое сердце и ничего, могу извлечь только один кусок данных из каждой строки

1 Ответ

2 голосов
/ 01 марта 2020

За исключением случаев, когда между кавычками могут быть экранированные кавычки и другие подобные хитрые вещи, я бы попробовал команду sed , чтобы отфильтровать ваш большой файл:

sed 's/^"[^"]*": "\([^"]*\)".*"\(.*\)"$/\1:\2/'

По сути, вы ищете две подгруппы \1 и \2, содержащие нужные вам поля, и вы печатаете их, разделенные :.

Если заголовок строки появляется буквально, регулярное выражение передается в качестве аргумента Для sed это менее уродливо:

sed 's/^"title": "\([^"]*\)".*"\(.*\)"$/\1:\2/'

Еще безопаснее, чтобы избежать побочных эффектов от случайных данных:

sed 's/^"title": "\([^"]*\)".*"rank": "\(.*\)"$/\1:\2/'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...