使用jq将字符串转换为数字

时间:2018-01-04 17:51:59

标签: jq

在解析一些json后,我有类似下面的数字

1   BTC 1.1 -1.27   4.5 12483.315628    209496088918
2   XRP -1.14   20.92   153.78  3.0061025564    116453842357
3   ETH -1.08   13.41   40.64   847.89295234    82049924696.0
4   BCH 0.51    -9.21   -5.22   2025.07027989   34210094446.0
5   ADA 1.12    14.9    205.14  0.9950722725    25799309000.0
6   XEM -0.02   20.4    100.84  1.4710629893    13239566903.0

我希望在打印之前将它们转换为数字,因为它们不是那么可读的。

在最后一列中,我想在点之后将精度截断为3位,在最后一列中,我想要除以1M。在json中,这些字段是字符串。我被迫使用jq

上下文是这样的:

curl -s "https://api.coinmarketcap.com/v1/ticker/?convert=EUR&limit=20" | jq -r '.[] | [.rank, .symbol, .percent_change_1h, .percent_change_24h, .percent_change_7d, .price_eur, .market_cap_eur] | @tsv'

我在项目github上添加了issue,因此请检查更新。

1 个答案:

答案 0 :(得分:3)

jq + awk 解决方案(假设 Linux 环境):

curl -s "https://api.coinmarketcap.com/v1/ticker/?convert=EUR&limit=20" \
| jq -r '.[] | [.rank, .symbol, .percent_change_1h, .percent_change_24h,
.percent_change_7d, .price_eur, .market_cap_eur] | @tsv' \
| awk '{ $6=sprintf("%.3f",$6); $7=$7/(1*10^6) }1' | column -t

输出:

1   BTC    1.62   0.76    5.63    12618.627  211768
2   XRP    -4.04  13.64   142.7   2.885      111773
3   ETH    -1.12  11.55   40.07   845.206    81790.2
4   BCH    1.01   -7.0    -4.13   2043.695   34524.9
5   ADA    -2.79  10.38   194.99  0.966      25046.2
6   XEM    -1.64  17.26   96.98   1.445      13006.7
7   XLM    -3.54  -9.96   267.75  0.660      11804
8   TRX    -0.48  152.86  454.55  0.169      11132.6
9   LTC    -1.64  -3.04   -2.97   197.775    10801.2
10  MIOTA  5.79   4.76    19.54   3.481      9675.58
11  DASH   0.73   8.52    13.65   1045.762   8155.11
12  NEO    0.13   9.17    69.28   87.454     5684.52
13  EOS    -0.25  27.87   22.32   9.652      5628.04
14  XMR    0.32   0.28    6.36    333.080    5183.6
15  BTG    1.12   2.98    -2.53   231.167    3870.93
16  QTUM   0.28   3.58    11.99   50.186     3702.88
17  XRB    4.29   15.4    160.91  25.188     3356.32
18  ETC    -3.23  10.74   24.11   30.394     3005.25
19  ICX    -3.59  9.69    37.95   6.352      2398.27
20  LSK    5.42   9.61    -1.45   18.794     2192.41