使用 cURL 命令,如何获取*不带*逗号和空格返回的股票数据?

使用 cURL 命令,如何获取*不带*逗号和空格返回的股票数据?

我可以在下面的脚本中添加什么,以便它获取股票数据并将其返回,而不需要任何逗号和空格?例如,GOOG 流通股为 675,000,000 股。

我希望我的 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
    }'

请注意\行末尾的反斜杠 - 这些可确保命令不会单独调用,而是就像它们在一行上一样。该符号用于增强可读性。四行 AWK 脚本中不使用反斜杠,因为反斜杠被引号包围,因此新行是整个命令的一部分。并且一定要阅读一些有关 UNIX shell 脚本编写的基本教程 - 它将在以后为您节省大量时间。

另请注意 URL 周围的引号 - 这些引号可确保&shell 不会解释特殊字符(在本例中)。

相关内容