首先来道题热身一下截止到2014.2.23,亚太互联网络信息中心分配给中国大陆的IPv4地址是多少个?下载文件http://ftp.apnic.net/stats/apnic/2014/delegated-apnic-20140223.gz进行统计分析。文件格式为:apnic|CN|ipv4|1.2.2.0|256|20110331|assigned等级机构|获得该IP段的国家/组织|资源类型|起始IP|IP段长度|分配日期|分配状态0x01 grep练习1统计文件中的空行个数并输出数据:grep-1练习2统计文件中不包含”.txt”的行的行数并输出数据:grep-2练习3求两个文件的差集(3a.txt-3b.txt)并排序输出到标准io中数据:grep-3agrep-3b练习4在log文件中,有表示各轮迭代模型性能的报告(如下所示),
Total: P=0.97198463(7841/8067) R=0.97914585(7841/8008) F=0.97555210
请将他们提取出来,并以如下格式输出。
P=0.97 R=0.98 F=0.98
数据:grep-40×02 sed练习1去掉文件中的空行数据:sed-1练习2某个文件包含三列,第三列是文本,但是文本被’扩了起来,请用提取出这一列并去掉开头和结尾的’符号。数据:sed-2练习3现在有如下文件
dev.gb.conll06.rawtest.gb.conll06.rawtrain.gb.conll06.raw
cat delegated-apnic-20140223 | awk -F\&; ‘BEGIN{$i=0}{if($2 == “CN”&&$3 == “ipv4”) {i=i+$5} print i }’ | tail -1请用sed和for配合,将文件名的后缀.raw去掉0x03 awk练习1输出一个文件所有的偶数行数据:awk-1练习2对于一个保存单词 频率的文件,要同时计算它的累积频率,并将它填在第三列。 举例如下,输入文件是
the 100i 50is 45...
输出文件是
the 100 100i 50 150is 45 195...
数据:awk-2练习3读入一个包含词性的文件,从中提取出原始句子。 输入文件格式:
石家庄_ns 空气_n 污染_vn 排_v 第一_m潘石屹_ns 遭遇_v 被_p 代言_n...
输出文件:
石家庄空气污染排第一潘石屹遭遇被代言...
数据:awk-30×04 答案热身答案:
cat delegated-apnic-20140223 | awk -F\| 'BEGIN{$i=0}{if($2 == "CN"&&$3 == "ipv4") {i=i+$5} print i }' | tail -1
grep练习1
grep -c "^$" grep-1.txt
grep练习2
grep -v ".txt" grep-2.txt
grep练习3
grep -v -f grep-3b.txt grep-3a.txtgrep -v -f grep-3a.txt grep-3b.txt
grep练习4
grep "^* Total:" 4.dat | sed "s/* Total: P=\(.\{4\}\).\{18\}R=\(.\{4\}\).\{18\}F=\(.\{4\}\).*/P=\1 R=\2 R=\3/"
网上的答案是编写shell脚本,代码如下:
for LINE in `grep "^* Total:" 4.dat`doif [[ $LINE == "P="* ]];then p=${LINE:0:6}fiif [[ $LINE == "R="* ]];then r=${LINE:0:6}fiif [[ $LINE == "F="* ]];then f=${LINE:0:6}fi# the new line parameter is -e,the other is -nif [[ $p == "P="* ]] && [[ $r == "R="* ]] && [[ $f == "F="* ]];then echo -n $pecho -n " "echo -n $recho -n " "echo -n $fecho ""p=""r=""f=""fidone
sed练习1
sed '/^$/d' sed-1.txt
sed练习2
sed "s/.*[ \t]\{1,\}'//;s/'//" sed-2.txt
sed练习3
for file in `ls`; do mv $file `echo $file | sed 's/\.raw$//'`; done
awk练习1
awk 'NR%2==0' awk-1.txt
awk练习2
i=1THIRD=0for ID in $(cat awk-2.txt)doNUM=$iFIRST=$(awk 'NR=='$NUM' {print $1}' 2.dat)SECOND=$(awk 'NR=='$NUM' {print $2}' 2.dat)THIRD=$((THIRD+SECOND))echo -n $FIRSTecho -n " "echo -n $SECONDecho -n " "echo -n $THIRDecho ""i=$((i+1))done
awk练习3
sed 's/[ _a-zA-Z ]//g' awk3.txt
From https://github.com/HIT-SCIR/scir-training-day/tree/master/1-shell-practice