老师留得题目

http://oldboy.blog.51cto.com/2561410/1337343


首先我用了一个我最快想到办法

用了一个超级笨的办法
#!/bin/bash
#(基础)
pwd=`pwd`
#(临时目录)
dir="htmldir"
#(源文件地址)
html="http://vote.runsky.com/2013/12/jiaoyu/"
#(临时文件1)
file1="jiayou1.txt"
#(临时文件2)
file2="jiayou2.txt"
############################################
#(创建下载目录)
if[ ! -d "${pwd}/${dir}"];then
cd $pwd
mkdir $dir
fi
############################################
zhejiushichaxun(){
local param
param=$1
if[ "$param"!= ""]; then
#(a=`grep $i $param|awk -F"="'{print $2}'`)
a=`grep "<span""${param}"|awk -F "<|>"'{printf $3" "}'`
echo "${a}">>1.txt
else
echo "file or filename error at:"`date`
fi
}
############################################
#(循环10分钟)
whiletrue
do
qz=1
#(进入下载目录)
cd ${pwd}/${dir}
#(进行文件下载)
wget -c ${html}
#(进行文件分析)
#(对文件进行取出tab建.之后在取值)
#echo "'s/\x09//g' index.html"|xargs sed -n >${file1}
sed 's/\x09//g'index.html |grep -A 5"<li>">${file1}
#(进行一些基本赋值)
#(设定需要单独取出的行数)
ts=($(grep -n "^-""${file1}"|awk -F":"'{printf $1" "}'))
echo ${hs[@]}
#(设定循环次数)
css=`grep -n "^-""${file1}"|wc -l`
for((i=0;i<="${css}";i++))
do
a=$i
b=`echo $(($i+1))`
c=`echo ${ts[${a}]}`
d=`echo ${ts[${b}]}`
#(判断了长度为空的时候跳过本次循环)
if[ -z "${d}"];then
continue
fi
echo "'"${c}","${d}"p' "${file1}""|xargs sed -n >${file2}
zhejiushichaxun ${file2}
rm -rf ./${file2}
i=$b
done
sort -nr -k 3-t ":"${pwd}/${dir}/1.txt >2.txt
awk -F " "'{print $3"\x09"$2}'2.txt >1.txt
cat -n 1.txt >index.html
#(循环读取一段然后进行分析)
#rm -rf ${dir}
rm -rf ./${file1}
rm -rf ./2.txt
rm -rf ./1.txt
echo "取第${qz}次"
qz=`echo $(($qz+1))`
#(等待10分钟)
sleep 600
done

经过一晚上的思考.和观摩了上面学长的一些做法.

想出了利用awk和for循环的办法.来进行解释

fori in`curl http://vote.runsky.com/2013/12/jiaoyu/|awk -F"<|>|:" '/票数/{print$4};/redtxt/{print$3}'`
#(利用for来对初始变量进行取值)
#(下载后显示出文本,然后利用awk
#awk中先用-F划分隔符,然后利用'/票数/{print$4};/redtxt/{print$3}'进行分别取值.这里;号代表了分开取值. //之间代表选取某个取值符号
#)
do
#(这里a 选进行判断.数字会成为0字会成为1)
a=`echo $i|grep -v '[0-9]*[0-9]'|wc -l`
#(判断.如果是数字就打印 i和b如果不是就定义b等于文字.这样就解决了打印在两行的问题)
if[ "${a}"= "0"];then
echo $i $b
else
b=`echo $i`
fi
done|sort -nr |cat -n
#(这里都弄完了就排序.排序之后打印行号.)