
内容が次のようなテキストファイルがあります。
{"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+)$'
それでは分析してみましょう。
jq ".[]" <filename>
マップの各キー値を印刷します。ただし、入れ子になった地図では機能しない可能性があります。sed s/\"//g
リストのすべての引用符が削除されます。grep -P '^\d+(\.\d+)?$'
整数または小数のみを含む行を返します。
このコマンドチェーンは結果を標準出力として出力します。ファイルに入れるには、出力をファイルにパイプするだけです。
jq ".[]" <filename> | sed s/\"//g | grep -P '^\d+(\.\d+)$' > <other_filename>
答え2
これはパールラインです:
perl -pe 's/.*?(\d+\.\d+)/$1 . "\n"/eg' file1 > file2