两周以后上课时交。纸版。
Step 0 linux远程登录
YingLvs-MacBook-Pro:~ Ying$ ssh -p 22 [email protected]
[email protected]'s password:
Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 4.2.0-42-generic x86_64)
* Documentation: https://help.ubuntu.com/
97 packages can be updated.
86 updates are security updates.
WARNING: Security updates for your current Hardware Enablement Stack
ended on 2016-08-04:
* http://wiki.ubuntu.com/1404_HWE_EOL
There is a graphics stack installed on this system. An upgrade to a
configuration supported for the full lifetime of the LTS will become
available on 2016-07-21 and can be installed by running 'update-manager'
in the Dash.
Last login: Wed Mar 28 12:41:46 2018 from 10.213.24.110
Step 1 保存网页
ying@ying-Lenovo-XiaoXin-CHAO7000:homework01$ curl http://www.86pm25.com/city/beijing.html -o 2018032918pm25_html
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 13223 100 13223 0 0 3009 0 0:00:04 0:00:04 --:--:-- 3052
Step 2 查看所需网页内容
ying@ying-Lenovo-XiaoXin-CHAO7000:homework01$ cat 2018032918pm25_html | grep '2018'
更新:2018年03月29日 18时
ying@ying-Lenovo-XiaoXin-CHAO7000:homework01$ cat 2018032916pm25_html|grep ''
奥体中心 99 45μg/m³ 148μg/m³
昌平镇 106 41μg/m³ 162μg/m³
定陵 125 41μg/m³ 200μg/m³
东四 99 45μg/m³ 148μg/m³
古城 103 38μg/m³ 156μg/m³
官园 93 37μg/m³ 135μg/m³
海淀区万柳 97 42μg/m³ 143μg/m³
怀柔镇 115 65μg/m³ 179μg/m³
农展馆 109 44μg/m³ 168μg/m³
顺义新城 119 47μg/m³ 188μg/m³
万寿西宫 87 38μg/m³ 124μg/m³
cat 连接并列出文件内容 grep在文件中查找字符串
Step 3 使用awk输出所需内容
ying@ying-Lenovo-XiaoXin-CHAO7000:homework01$ cat 2018032916pm25_html| awk '/[^>]*<\/div>/{printf("%s",$2)}'
class="remark">更新:2018年03月29日 奥体中心 99 45μg/m³ 148μg/m³ 昌平镇 106 41μg/m³ 162μg/m³ 定陵 125 41μg/m³ 200μg/m³ 东四 99 45μg/m³ 148μg/m³ 古城 103 38μg/m³ 156μg/m³ 官园 93 37μg/m³ 135μg/m³ 海淀区万柳 97 42μg/m³ 143μg/m³ 怀柔镇 115 65μg/m³ 179μg/m³ 农展馆 109 44μg/m³ 168μg/m³ 顺义新城 119 47μg/m³ 188μg/m³ 万寿西宫 87 38μg/m³ 124μg/m³
awk文本处理语言
/将数据所在行输出
/[^>]*<\/div>/{printf("%s",$2)}将日期所在行输出
[^>]*
表示所有不含">"符号的集合
Step 4 规格化处理日期 删除无用字符
ying@ying-Lenovo-XiaoXin-CHAO7000:homework01$ cat 2018032918pm25_html | sed -e 's/[0-9][0-9]*/ \0 /g' | awk '/[^>]*<\/div>/{printf("%s-%s-%s %s:00:00",$3,$5,$7,$9)}'|sed -e 's/<[^>]*>/ /g' -e 's/μg\/m³//g'
2018-03-29 18:00:00 奥体中心 109 35 168 昌平镇 94 27 137 定陵 111 30 172 东四 133 33 215 古城 114 33 177 官园 99 36 148 海淀区万柳 89 28 127 农展馆 137 50 224 顺义新城 95 34 139 万寿西宫 125 41 ying@ying-Lenovo-XiaoXin-CHAO7000:hom
sed -e 's/[0-9][0-9]*/ \0 /g'
用于匹配数字串,将其与前后字符用空格隔开,
/[^>]*<\/div>/{printf("%s-%s-%s %s:00:00",$3,$5,$7,$9)}'
选择处理后的日期行的第3,5,7,9列按格式输出
|sed -e 's/<[^>]*>/ /g' -e 's/μg\/m³//g'
删除所有标签和单位
μg\/m³
匹配μg/m³因为/是匹配操作符,需要使用\转义
step 5 最终输出
ying@ying-Lenovo-XiaoXin-CHAO7000:homework01$ cat 2018032918pm25_html | sed -e 's/[0-9][0-9]*/ \0 /g' | awk '/[^>]*<\/div>/{printf("%s-%s-%s %s:00:00",$3,$5,$7,$9)}'|sed -e 's/<[^>]*>/ /g' -e 's/μg\/m³//g' | awk /2018/{'for (i=1;i<=10;i++) printf("%s %s,%s,%s\n",$1,$2,$(i*4-1),$(i*4+1))'}
2018-03-29 18:00:00,奥体中心,35
2018-03-29 18:00:00,昌平镇,27
2018-03-29 18:00:00,定陵,30
2018-03-29 18:00:00,东四,33
2018-03-29 18:00:00,古城,33
2018-03-29 18:00:00,官园,36
2018-03-29 18:00:00,海淀区万柳,28
2018-03-29 18:00:00,农展馆,50
2018-03-29 18:00:00,顺义新城,34
2018-03-29 18:00:00,万寿西宫,41
awk /2018/{'for (i=1;i<=10;i++) printf("%s %s,%s,%s\n",$1,$2,$(i*4-1),$(i*4+1))'}
awk 匹配含有2018的行,循环输出,每行输出已处理好的日期,不同的地点和对应的pm2.5数值。
step 6 附 两天 pm10的对比
ying@ying-Lenovo-XiaoXin-CHAO7000:homework01$ cat 2018032915pm25_html 2018032812pm25_html | sed -e 's/[0-9][0-9]*/ \0 /g' | awk '/[^>]*<\/div>/{printf("%s-%s-%s %s:00:00",$3,$5,$7,$9)}'|sed -e 's/<[^>]*>/ /g' -e 's/μg\/m³//g' | awk /2018/{'for (j= 0;j<2;j++) for (i=1;i<=11;i++) printf("%s %s,%s,%s\n",$(j*46+1),$(j*46+2),$(j*46+i*4-1),$(j*46+i*4+2))'}
2018-03-29 15:00:00,奥体中心,143
2018-03-29 15:00:00,昌平镇,183
2018-03-29 15:00:00,定陵,195
2018-03-29 15:00:00,古城,189
2018-03-29 15:00:00,官园,141
2018-03-29 15:00:00,海淀区万柳,143
2018-03-29 15:00:00,怀柔镇,165
2018-03-29 15:00:00,农展馆,137
2018-03-29 15:00:00,顺义新城,186
2018-03-29 15:00:00,天坛,158
2018-03-29 15:00:00,万寿西宫,140
2018-03-28 12:00:00,奥体中心,1241
2018-03-28 12:00:00,昌平镇,—
2018-03-28 12:00:00,定陵,1485
2018-03-28 12:00:00,东四,1333
2018-03-28 12:00:00,古城,1316
2018-03-28 12:00:00,官园,1298
2018-03-28 12:00:00,海淀区万柳,1028
2018-03-28 12:00:00,怀柔镇,919
2018-03-28 12:00:00,农展馆,1347
2018-03-28 12:00:00,顺义新城,1161
2018-03-28 12:00:00,天坛,1213
for (j= 0;j<2;j++) for (i=1;i<=11;i++) printf("%s %s,%s,%s\n",$(j*46+1),$(j*46+2),$(j*46+i*4-1),$(j*46+i*4+2))'
嵌套的循环语句,在每个参数都加上了文件序号与文件列数的乘积,以得到正确的字符串序号。
附录:远程传输 scp
YingLvs-MacBook-Pro:linux Ying$ scp 2018032909pm25_html [email protected]:/home/ying/Develop/linux/homework01
[email protected]'s password:
2018032909pm25_html 100% 13KB 549.5KB/s 00:00
你可能感兴趣的:(linux)