我有一个文本文件,其内容如下所示:
{"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+)$'
现在,让我把它分开:
jq ".[]" <filename>
将打印地图中每个键的值。不过,这可能不适用于嵌套地图。sed s/\"//g
将删除列表中的所有引号。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