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

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

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

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 
  • Как работает вилочная бомба?
  • массив сценариев оболочки для элементов файлов
  • косвенное изменение переменной в POSIX, как сделано в bash?
  • Как скопировать последний файл из одного каталога в другой?
  • Начальная последовательность движения - модификация скрипта оболочки
  • Отключение соединения по событию
  • чтение списка строк из файла, записывающего вывод в утилиту
  • Манипулировать некоторые данные с ограниченным разделением в полезный CSV
  • работа с неисполняемыми командами внутри shell-скрипта
  • Реагировать на входящие файлы в каталоге на HP-UX
  • Скрипт оболочки, который никогда не умирает
  • Замена шаблона после n-го совпадения найдена в каждой строке?
  • Linux и Unix - лучшая ОС в мире.