Извлеките числа из текстового файла и поместите их в другой файл

У меня есть текстовый файл, содержимое которого выглядит так:

{"result":"true","last":0.02094,"high":0.0213,"low":0.01682,"avg":0.01871,"sell":0.02094,"buy":0.02054,"vol_ltc":5145.8262,"vol_btc":96.29887,"rate_change_percentage":"23.47"}` 

(Это данные из API)

Я хочу, чтобы он был отформатирован, чтобы моя программа могла его прочитать, но мне нужно извлечь числа, потому что некоторые из обменов по-разному отформатированы API, например:

 {"result":"true","last":"0.00000070","high":"0.00000073","low":"0.00000069","avg":"0.00000071","sell":"0.00000071","buy":"0.00000069","vol_doge":71072621.657,"vol_btc":50.64272,"rate_change_percentage":"0.00"} 

(Разница: котировки вокруг значений цены)
И мне нужно что-то похожее на это:
(С использованием первого)

 0.02094 0.0213 0.01682 0.01871 0.02094 0.02054 5145.8262 96.29887 23.47 

Альтернативно, что-то вроде этого (опять же, используя первый)

 last 0.02094 high 0.0213 low 0.01682 avg 0.01871 sell 0.02094 buy 0.02054 vol_ltc 5145.8262 vol_btc 96.29887 rate_change_percentage 23.47 

Если вам нужно больше примеров строк из API, перейдите по адресу http://data.bter.com/api#tickers

  • Как удалить строку с переменным поиском с помощью команды sed
  • Назначение глобальных и локальных переменных
  • Автоматический запуск определенных скриптов при первом входе в систему / при запуске ПК
  • Может ли постоянное присвоение переменной в сценарии оболочки вызвать утечку памяти?
  • Как работает следующий сценарий оболочки для поиска всех файлов размером более 20 МБ?
  • Если UID = 1000 продолжается, иначе выйдите
  • Как навалом сжимать разные подпапки?
  • Как сохранить журнал «uptime record» в Debian?
  • 2 Solutions collect form web for “Извлеките числа из текстового файла и поместите их в другой файл”

    Поскольку API возвращает объекты JSON, я бы использовал парсер JSON для него, в сочетании с sed и grep.

    Я решил для jq , который содержится в репозитории Ubuntu, поэтому его можно установить с помощью sudo apt-get install jq ; Я не знаю, какой дистрибутив вы используете, поэтому вам придется найти это самостоятельно, если вы хотите использовать это решение.

     jq ".[]" <filename> | sed s/\"//g | grep -P '^\d+(\.\d+)$' 

    Теперь позвольте мне разделить это:

    1. jq ".[]" <filename> будет печатать значение для каждого ключа на карте. Это, вероятно, не работает с вложенными картами.
    2. sed s/\"//g лишит список любых кавычек.
    3. grep -P '^\d+(\.\d+)?$' вернет те строки, которые состоят только из целочисленных или десятичных чисел.

    Эта цепочка команд выведет результат в stdout. Чтобы получить его в файл, просто подключите его к нему:

     jq ".[]" <filename> | sed s/\"//g | grep -P '^\d+(\.\d+)$' > <other_filename> 

    здесь находится perl однострочный:

     perl -pe 's/.*?(\d+\.\d+)/$1 . "\n"/eg' file1 > file2 
    Interesting Posts

    Запуск tomcat под учетной записью сервиса tomcat в CentOS

    Сколько ОЗУ может выделить приложение на 64-разрядных системах x86 Linux?

    Восстановить исходную строку.h после случайной перезаписи

    Как удаленно войти в систему с полным графическим рабочим столом по X11

    Как отобразить цвет с помощью команды piping на меньшее?

    Автоматическое монтирование устройства iscsi при запуске системы (Ubuntu)

    Как распознать, какой символ ASCII в шестнадцатеричном состоянии?

    Как предоставить кому-то еще доступ к моему серверу linux

    Как перекомпилировать exim4-daemon-heavy?

    локальный репозиторий yum с неработающим списком групп

    Установить Mesa3D на Debian – LIBDRM не найден с помощью configure autoconf

    Запуск Cinnamon / X из командной строки —> Нет звука, программный рендеринг

    Резервное копирование по неправильному жесткому диску

    Защита сервера локальной сети с помощью OpenVPN?

    Символические ссылки с ls, mv: принуждение функций к использованию «логических» адресов (запоминание исходного пути)

    Linux и Unix - лучшая ОС в мире.