老师留得题目
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 #(这里都弄完了就排序.排序之后打印行号.)