Re: [問題] 要做個自動抓基金淨值功能

看板Programming作者時間15年前 (2010/10/04 04:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/8 (看更多)
※ 引述《theater.bbs@ptt.cc》之銘言: > ※ 引述《Storm.bbs@bbs.sayya.org (風)》之銘言: > : 還可以用 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
文章代碼(AID): #1CgE3-Oj (Programming)
文章代碼(AID): #1CgE3-Oj (Programming)