看板Programming
标 题Re: [问题] 要做个自动抓基金净值功能
发信站SayYA 资讯站 (Mon Oct 4 03:43:36 2010)
转信站ptt!news.ntu!ctu-gate!ctu-peer!news.nctu!News.Math.NCTU!SayYa
※ 引述《[email protected]》之铭言:
> ※ 引述《[email protected] (风)》之铭言:
> : 还可以用 gawk 合并 grep 和 sed 的部分:
> : wget -O - http://fund.cnyes.com/Detail/historicalNav/B08,020.html \
> : |awk '/个别基金:start/
> : {print gensub(/.*"pe r">([0-9]+\.[0-9][0-9])<\/td>.*/,"\\1","") > "a.txt"}'
> : 或
> : wget -O - http://fund.cnyes.com/Detail/historicalNav/B08,020.html \
> : |awk '/个别基金:start/
> : {print gensub(/.*"pe r">([0-9]+\.[0-9][0-9])<\/td>.*/,"\\1","")}' > a.txt
> hi
> 执行时出现
> .
> 这是是一堆html
> .
> 2010-10-03 13:43:00 (28.2 KB/s) -- 已储存 ‘-’ [72584/72584])
> --2010-10-03 13:43:00-- http://%5C/
> 正在查找主机 \... 失败: Host not found。
> wget: unable to resolve host address `\'
> FINISHED --2010-10-03 13:43:02--
> Downloaded: 1 files, 71K in 2.5s (28.2 KB/s)
> D:\Program Files\GnuWin32\bin>|awk '/个别基金:start/
> 这个时候不应有 |。
> 我把|删掉再次执行出现
> D:\Program Files\GnuWin32\bin>awk '/个别基金:start/
> awk: '/个别基金:start/
> awk: ^ invalid char ''' in expression
> 麻烦替我解答一下 感谢
会出现你执行的错误的原因是,我写的指令其实是全部串起来,要全部写在同一列。
在 UNIX 上,「\」可以把一列指令分成好几列来写,「\」是告诉 shell 说这列指令还
没结束,要接到下一列去。同样的,因为在 UNIX shell 下,单引号要对称,所以 awk
後面给的参数部分,第一列的单引号「'」没有成对,因此 shell 会知道第二列的内
容是延续上一列的。
不过在 Windows 上,如果你不是使用 cygwin 或者使用 MinGW 或 GnuWin 的 bash
的话,Windows 的 cmd.exe 对「\」的解读会和 UNIX 的 shell 差异颇大,把「\」
当成 wget 的参数丢给 wget,所以 wget 才会回应说「unable to resolve host
address `\'」。还有,显然 cmd.exe 对没有对称的单引号的处理也和 UNIX shell
不同,因此 awk 看到给他的参数只有「'/个别基金:start/」,包含一个不对称没有
封闭的单引号,回应「invalid char ''' in expression」告诉你那个单引号有问题。
因此,最简单的解决办法是,把整段三列全部写在同一列(记得要去掉 "\") 去执行。
"|" 符号是所谓的 pipeline,这个部分 MS 从 DOS 时代的 command.com 到 Windows
的 cmd.exe 都有抄到 UNIX shell 的这个功能,所以应该不会有问题。
所以你在 cmd.exe 上执行这些指令时,应该是类似这样子:
D:\Program Files\GnuWin32\bin> wget -O -
http://fund.cnyes.com/Detail/historica
lNav/B08,020.html |awk '/个别基金:start/ {print gensub(/.*"pe r">([0-9]+\.[0-9]
[0-9])<\/td>.*/,"\\1","") > "a.txt"}'
总之应该整段指令一次执行,wget 和 awk 中间只有 "|" 隔开。手边目前没 Windows
的机器可以用来截图,所以先这样吧!加油啦!
--
※ Origin: SayYA 资讯站 <bbs.sayya.org>
◆ From: c-76-111-34-186.hsd1.ga.comcast.net