텍스트 파일에서 숫자를 추출하여 다른 파일에 넣습니다.

텍스트 파일에서 숫자를 추출하여 다른 파일에 넣습니다.

내용이 다음과 같은 텍스트 파일이 있습니다.

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

답변2

이것은 펄 라인입니다:

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

관련 정보