1

У меня есть большой (десятки ГБ) текстовый файл с данными в формате key=value;foo=bar;baz=quo формат quo .

Количество и порядок ключей может меняться от строки к строке.

Мне нужно обработать этот файл и извлечь значения для ключа foo из командной строки Linux (я использую bash в качестве оболочки).

Каков наиболее эффективный способ сделать это без установки огромных зависимостей или написания кода?

3 ответа3

1
sed -n -e 's/^foo=\([^;][^;]*\).*/\1/p'  -e 's/.*;foo=\([^;][^;]*\).*/\1/p' yourGBfile

-n опция, не печатать все строки

-e 'скрипт'

Первый скрипт -e соответствует, если строка начинается с foo= а второй скрипт -e соответствует foo= после точки с запятой.

[^;] означает, что не совпадает ни с одной точкой с запятой, а [^;][^;]* означает, как минимум, одну точку с запятой (не найдет пустых значений!), которая эффективно извлекает ваше значение между равными и точкой с запятой.

Скобки заключают в себе позиционную строку, на которую ссылается \1 .

1

Это много данных, поэтому практически любое решение командной строки будет медленным.

grep -oP '(?<=\bfoo=)[^;]+' file
0

Вы также можете попробовать решение perl, которое может быть быстрее: perl -nle 'print "$1" if /foo=(.*);/' filename.txt

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .