平時很少能有時間和精力收看五大聯賽的直播,可還是比較關注賽程賽況,但是上網查看資訊,要點很多連結,上周寫了一個用awk來下載YouTube視頻的程式,這次仍然想用gawk提供的網路功能完成這樣一個程式,但是遇到了不小的困難,例如我需要在BEGIN過程中擷取排名資訊的網頁,並利用regular expressions對該網頁進行多次過濾。於是想到用sed與awk的組合來完成這項工作,另外擷取網頁用的是curl,比gawk中分析http頭的方法又簡單得多了,程式在Cygwin中運行起來是這個樣子:
下面是代碼,Regex的部分也不難,就不解釋了。為了在awk中很好的區分RS,特意用sed在記錄之間加了一行‘#’,這個地方實現的不夠精巧,如果不這樣,RS設定為空白行,FS設定為分行符號又不能很好的得到結果,也許RS和FS中的Regex沒有寫好,有興趣的我們可以交流交流。
- #! /usr/bin/bash
- ################################################################################
- #Program: 擷取五大聯賽球隊積分的script程式
- #
- #Author: hailongchang@163.com
- #
- #Date: 2008/11/17
- ################################################################################
- function usage(){
- echo
"請選擇您要查看的聯賽排名:"
- echo
- echo
"1 英格蘭足球超級聯賽"
- echo
"2 意大利足球甲級聯賽"
- echo
"3 德國足球甲級聯賽"
- echo
"4 西班牙足球甲級聯賽"
- echo
"5 法國足球甲級聯賽"
- echo
- read -p
"請選擇序號: "
choice
- case
$choice in
- "1"
)
- name=
"epl"
- ;;
- "2"
)
- name=
"seri"
- ;;
- "3"
)
- name=
"bund"
- ;;
- "4"
)
- name=
"liga"
- ;;
- "5"
)
- name=
"fran"
- ;;
- *)
- usage
- ;;
- esac
- }
- usage
- DataBase=
"http://stats.sports.sohu.com/istanding.aspx?lega="
- if
[ -n $name ]; then
- Address=$DataBase${name}
- fi
- curl $Address 2>/dev/null |
- sed -e '
- s/<[//]*html>
//g;
- s/<[//]*body>
//g;
- s/<[//]*script[^>]*>
//g;
- s/<[//]*table[^>]*>
//g;
- s/<[//]*div[^>]*>
//g;
- s/<[//]*form[^>]*>
//g;
- s/<[//]*td[^>]*>
//g;
- s/<[//]*tr[^>]*>
//g;
- s/<[//]*a[^>]*>
//g;
- s/.*[;{}>]$
//g;
- ' | sed -e '
s/[ /t]*
//g;s/[0-9]/{1,4/}-[0-9]/{1,4/}.*//g;/^$/d' | sed -e '
- 1i ################################
- 11i ################################
- 21i ################################
- 31i ################################
- 41i ################################
- 51i ################################
- 61i ################################
- 71i ################################
- 81i ################################
- 91i ################################
- 101i ################################
- 111i ################################
- 121i ################################
- 131i ################################
- 141i ################################
- 151i ################################
- 161i ################################
- 171i ################################
- 181i ################################
- 191i ################################
- 201i ################################
- 211i ################################
- 221i ################################
- 231i ################################
- ' | awk '
- BEGIN{
- RS=
"################################/n"
- FS=
"/n"
- #OFS="/t"
- }
- {
- printf(
"%4s/t%10s/t%4s/t%4s/t%4s/t%4s/t%4s/t%4s/t%4s/t%4s/t/n"
,$1,$2,$3,$4,$5,$6,$7,$8,$9,$10)
- }'