テキストファイルから数字を抽出して別のファイルに入れます。

テキストファイルから数字を抽出して別のファイルに入れます。

内容が次のようなテキストファイルがあります。

{"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オブジェクトを返すので、sedとgrepと組み合わせたJSONパーサーを使用します。

私は決めたジャック、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>

おすすめ記事