주식 데이터를 가져와서 쉼표와 공백 없이 반환하도록 아래 스크립트에 무엇을 추가할 수 있습니까? 예를 들어 GOOG의 발행 주식 수는 6억 7500만 주입니다.
내 txt 파일이 675000000을 출력하길 원합니다. (공백, 쉼표, 구두점은 사용할 수 없습니다.) 그러나 주가의 경우 소수점 기능이 필요합니다.)
cd desktop/quoteUpdate
while true
do
curl -o quotes.txt -s "http://download.finance.yahoo.com/d/quotes.csv?s=avxl,goog,aapl&f=snl1c6j2s6f6"
sed -i '.bak' 's/,/ /g' quotes.txt # replace commas with spaces
echo UPDATED:
date
sleep 10
done
답변1
문제는 URL에 CSV라고 나와 있지만 그렇지 않다는 것입니다. 쉼표가 포함된 공유 볼륨이 올바르게 참조되지 않습니다. 이는 추가 지식을 적용해야 함을 의미합니다. 이 경우 출력 형식을 변경해 보십시오.
http://download.finance.yahoo.com/d/quotes.csv?s=avxl,goog,aapl&f=snl1c6j2s6f6
생산:
"AVXL","ANAVEX LIFE SCIEN",0.1799,"-0.0041", 38,260,000,0, 23,703,000
"GOOG","Google Inc.",500.87,"+4.69", 678,365,000,67.911B, 572,967,000
"AAPL","Apple Inc.",109.80,"-0.42", 5,864,839,000,182.8B, 5,856,335,000
예를 들어:
http://download.finance.yahoo.com/d/quotes.csv?s=avxl,goog,aapl&f=sl1c6sj2ss6sf6
생산하다:
"AVXL",0.1799,"-0.0041","AVXL", 38,260,000,"AVXL",0,"AVXL", 23,703,000
"GOOG",500.87,"+4.69","GOOG", 678,365,000,"GOOG",67.911B,"GOOG", 572,967,000
"AAPL",109.80,"-0.42","AAPL", 5,864,839,000,"AAPL",182.8B,"AAPL", 5,856,335,000
그런 다음 예를 들어 다음을 사용할 수 있습니다.
sed 's/"[A-Z][^"]*",/ & /g' \
| awk -- '{
gsub("\"", "", $2);
gsub(",", "", $4);
gsub(",", "", $8);
print $1 $2 $4 "," $6 $8
}'
그러면 CSV와 유사한 내용이 제공됩니다.
"AVXL",0.1799,-0.0041,38260000,0,23703000
"GOOG",500.87,+4.69,678365000,67.911B,572967000
"AAPL",109.80,-0.42,5864839000,182.8B,5856335000
비결은 티커가 잘 일치하므로 필요할 때 앵커로 사용할 수 있다는 것입니다.
위의 마법 주문은 다음과 같은 작업을 수행합니다.
이
sed
호출은 티커 기호(대문자로 시작하는 큰따옴표로 묶인 문자열)의 발생을 둘러싸 공백으로 구분된 목록으로 효과적으로 표시합니다.awk
필드 2에서 모든 큰따옴표(첫 번째 줄)와 쉼표(두 번째 및 세 번째 줄)를 바꾸는 것부터 시작하세요(가격 변경 필드가 큰따옴표로 묶여서 부동 소수점 스프레드시트 대신 처리를 시작하면 문자열로 처리되는 것을 방지하기 위함). )은 각각 4와 8입니다. 마지막 줄은 수정된 필드를 인쇄합니다(그리고 이제 중복되는 추가 주식 기호를 생략합니다).
결국에는 다음과 같이 할 수 있습니다.
curl -s 'http://download.finance.yahoo.com/d/quotes.csv?s=avxl,goog,aapl&f=sl1c6sj2ss6sf6' \
| sed 's/"[A-Z][^"]*",/ & /g' \
| awk -- '{
gsub("\"", "", $2);
gsub(",", "", $4);
gsub(",", "", $8);
print $1 $2 $4 "," $6 $8
}'
\
줄 끝에 있는 백슬래시에 주의하세요 . 이렇게 하면 명령이 개별적으로 호출되지 않고 마치 한 줄에 있는 것처럼 호출됩니다. 이 기호는 가독성을 높이기 위해 사용됩니다. 백슬래시는 따옴표로 둘러싸여 있으므로 4줄 AWK 스크립트에서는 백슬래시를 사용하지 않습니다. 따라서 새 줄은 전체 명령의 일부입니다. 그리고 UNIX 쉘 스크립팅에 대한 몇 가지 기본 튜토리얼을 읽어 보십시오. 그러면 나중에 많은 시간을 절약할 수 있습니다.
또한 URL 주위에 따옴표를 기록해 두십시오. 이는 &
쉘이 특수 문자(이 경우)를 해석하지 않도록 합니다.