平时很少能有时间和精力收看五大联赛的直播,可还是比较关注赛程赛况,但是上网查看信息,要点很多链接,上周写了一个用awk来下载YouTube视频的程序,这次仍然想用gawk提供的网络功能完成这样一个程序,但是遇到了不小的困难,例如我需要在BEGIN过程中获取排名信息的网页,并利用regular expressions对该网页进行多次过滤。于是想到用sed与awk的组合来完成这项工作,另外获取网页用的是curl,比gawk中分析http头的方法又简单得多了,程序在Cygwin中运行起来是这个样子:
下面是代码,正则表达式的部分也不难,就不解释了。为了在awk中很好的区分RS,特意用sed在记录之间加了一行‘#’,这个地方实现的不够精巧,如果不这样,RS设置为空行,FS设置为换行符又不能很好的得到结果,也许RS和FS中的正则表达式没有写好,有兴趣的我们可以交流交流。
- #! /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)
- }'