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

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

{"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

  • Производительность скрипта Bash
  • Нельзя использовать псевдоним в скрипте, даже если я его определяю чуть выше!
  • Сценарий оболочки, написанный в другой оболочке, чем моя текущая оболочка
  • заголовок сценария оболочки для лучшей совместимости
  • Если выражение в shell-скрипте работает только полурабочее
  • как использовать shell-скрипт с snmpwalk с OID, чтобы иметь идентификатор vlan, имя vlan, порт принадлежит vlans в таблице Excel
  • Сценарий оболочки Loop, если входной файл имеет больше входных данных
  • Создание списка меню и выполнение задачи
  • 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 
    Linux и Unix - лучшая ОС в мире.