Linux ——正则表达式过滤(以北京监测网站为例)

Linux ——正则表达式过滤(以北京监测网站为例)

一、实验内容

从因特网上搜索Web页,用wget获取网页,处理网页html文本数据,从中提取出当前时间点北京各监测站的PM2.5浓度,输出如下CSV格式数据:
2020-03-09 13:00:00,海淀区万柳,73
2020-03-09 13:00:00,昌平镇,67
2020-03-09 13:00:00,奥体中心,66
2020-03-09 13:00:00,海淀区万柳,73
2020-03-09 13:00:00,昌平镇,73
2020-03-09 13:00:00,奥体中心,75

二、实验步骤

1、通过“wget”命令,获取网页内容。

Linux ——正则表达式过滤(以北京监测网站为例)
查看所获得的beijing.html文件的内容,如下所示:
Linux ——正则表达式过滤(以北京监测网站为例)

2、对得到的html文件进行编辑。

由于网站的内容都是用标签作为前后缀,所以可以使用sed命令将标签<>替换为空格。
Linux ——正则表达式过滤(以北京监测网站为例)
编辑之后得到的文件信息如下所示,可见这一步已提取出所有以汉字和数字来描述的关键信息。
Linux ——正则表达式过滤(以北京监测网站为例)

3、由于每行前面没有诸如“2020-03-09 13:00:00”的日期和时间,所以使用awk命令提取更新时间。

编写awk文件如下:
Linux ——正则表达式过滤(以北京监测网站为例)
Linux ——正则表达式过滤(以北京监测网站为例)

该操作之后得到如下结果,说明日期已经被提取出来了!
Linux ——正则表达式过滤(以北京监测网站为例)

4、下面提取各个检测点的名字和PM2.5的指数等信息。观察发现,每一行都有共同的“ μg”和“m3”。于是考虑用这两个中的一个来提取它们所在的行。

Linux ——正则表达式过滤(以北京监测网站为例)
修改awk文件如下:
Linux ——正则表达式过滤(以北京监测网站为例)
如果用“m”来提取的话,会出现如下内容,多出来了一条无用的信息,因为这一行也含有“m”。这是我们不想看到的情况。
Linux ——正则表达式过滤(以北京监测网站为例)
所以,选择用“g”来提取试试。如下图所示,没有多余的行,因此用“g”最为合适。

Linux ——正则表达式过滤(以北京监测网站为例)
Linux ——正则表达式过滤(以北京监测网站为例)

5、这时的结果已经很接近最后的格式了,但是前面没有年份。因此,用命令sed -e ‘s/s,更新:/2020- /g’将前面的“s,更新”字样改为2020。

Linux ——正则表达式过滤(以北京监测网站为例)

6、最后,用命令sed ‘s/00:00/00:00:00/g’ 将时间从00:00改为00:00:00。

Linux ——正则表达式过滤(以北京监测网站为例)