从文本文件中提取数字并将其放入另一个文件中

从文本文件中提取数字并将其放入另一个文件中

我有一个文本文件,其内容如下所示:

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

答案1

由于 API 返回 JSON 对象,我将使用 JSON 解析器,并结合 sed 和 grep。

我已经决定为了杰克,它包含在 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+)?$'将返回仅包含整数或小数的行。

该命令链会将结果打印到标准输出。要将其放入文件中,只需将输出通过管道传输到其中即可:

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

答案2

这是 perl 一行:

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

相关内容