2008年5月28日 星期三

Linux Programming (2) Wrapper

上課的內容:如何在上班時偷看股票~~~

1.先去找你要的網頁資料,並透過lynx 去抓股票:2475 下來存到aaa.txt

[root@SI502U30 Class]# lynx -dump http://tw.stock.yahoo.com/q/q?s=2475 > aaa.txt

2.人工搜尋你要的資料。例如我想要的股票資料為 [19] 和 [20] 那兩行中間(請自行打開aaa.txt文件檔)

[18]2475M
[19][X
14:30 9.55 9.55 9.56 0.24 29,595 9.79 9.80 9.82 9.55
[20]N@[21]sD
@[22]wX
xU (_) R (_) _____ i [BUTTON] [23]s

3.所以利用grep和cut去搜尋[19] 和 [20] 在檔案的那一行?
如例子上所列為 aaa.txt的 20行 和 22行

cut -d: -f1 表示 以 ":" 作分隔 ,並取 f1 (第一欄)
所以得到的 19\] 位於檔案的20行 ; 20\] 位於檔案的22行 ;

[root@SI502U30 Class]# grep -n 19\] aaa.txt |cut -d: -f1
20
[root@SI502U30 Class]# grep -n 20\] aaa.txt |cut -d: -f1
22

4.利用head 和 tail 將資料擷取出來 所以得到的資料
head -21 表示將檔案的第一行到第21行保留,第22行以下刪除
tail -1 表示將檔案的最底下數來第1行以下保留,倒數第2行以上刪除

[root@SI502U30 Class]# head -21 aaa.txt > temp.txt
[root@SI502U30 Class]# tail -1 temp.txt > temp2.txt
[root@SI502U30 Class]# cat temp2.txt
14:30 9.55 9.55 9.56 0.24 29,595 9.79 9.80 9.82 9.55

5.在利用cut把剩下精簡的資料作分欄
# cut -d" " -f9 temp2.txt 以空格當分隔 所以9.55為第九個分隔 14:30 為第6個分隔

[root@SI502U30 Class]# cat temp2.txt
14:30 9.55 9.55 9.56 0.24 29,595 9.79 9.80 9.82 9.55
[root@SI502U30 Class]# cut -d" " -f9 temp2.txt
9.55

6. 將上述所學的指令串成一個shell script (stock.sh)

如此就可以將每日的股票資料和你所想要觀察的資料當漏下來寄給自己。
如果公司有擋網頁的話就可以在上班的時候利用電子郵件看股票。


#(stock.sh)

i=2601
lynx -dump http://tw.stock.yahoo.com/s/s/kimo_day${i}.html >${i}.txt

begin_line=`grep -n 19\] ${i}.txt|cut -d: -f1`
echo "begin_line= $begin_line"

end_line=`grep -n 21\] ${i}.txt|cut -d: -f1`
echo "end_line= $end_line"

cut_line=$(( (end_line + begin_line)/2 ))
echo "cut_line= $cut_line"

head -${cut_line} ${i}.txt > tmp.txt
tail -1 tmp.txt > tmp2.txt

echo
echo time:`cut -d' ' -f4 tmp2.txt`
echo price:`cut -d' ' -f5 tmp2.txt`

exit
rm tmp.txt
rm tmp2.txt
rm ${i}.txt

1 則留言:

ckor 提到...

鄭老師~~您真是有心呀!
謝謝您囉!
感恩~~