文档章节

shell命令:抽取日志中最后一列内容并转为批量sql

zgw06629
 zgw06629
发布于 2015/04/27 14:34
字数 460
阅读 42
收藏 0

数据库表中有一url字段保存的是抓取url, 其中有些是无效的,当访问时会有如下的异常日志输出:

15-01-10 01:33:34,805 WARN com.test.recipevideohunter.VerifyDownloadUrl(VerifyDownloadUrl.java:45) ## 9 404 http://main.gslb.ku6.com/s1/t6F2Hw
OQFjnGhlk4/1228739498805/6a642a1a078c70105faecbfe279e0d60/1417507387239/v497/31/38/OvpyEGwZCS6OQw1FDCDpkEPw.mp4?rate=400 
15-01-10 01:33:49,823 WARN com.test.recipevideohunter.VerifyDownloadUrl(VerifyDownloadUrl.java:45) ## 16 404 http://main.gslb.ku6.com/s1/e1jhQ
lepjX5yM_Bw/1230877361121/4360b98ad5564c3a74609befa9391bcc/1417507393603/v477/10/31/r20PxPOUIQSiazUWgCCHPXIg.mp4?rate=180

想抽取出当前所有日志中的异常url。

日志均是以recipevideohunter开头且url为输出中最后一列。

  1. 打印最后一列url

awk '{print $NF}'  recipevideohunter*


2. 去重(因存在重复url)

awk '{print $NF}'  recipevideohunter* | sort | uniq

3. 重定向到一个文件中

awk '{print $NF}'  recipevideohunter*  | sort | uniq > invalid_url.txt

现在invalid_url.txt文件中的内容为(纯url了): 

http://main.gslb.ku6.com/o1/EPi7Gx2qL8gUbsPN/1218865000378/3e3ac380ad70221150d12803822be81b/1417507369022/v379/2/8/gH4x5sXGSuSfpUvmBBMj4Mg.mp4?
rate=250
http://main.gslb.ku6.com/s0/0qDR7_G3q03PATmc/1247598214983/73dc3715d688068e9d1167e97884b3eb/1417508605892/v591/25/6/gIMFWf23QKmUITSRqHWBkWQ.mp4
?rate=180
http://main.gslb.ku6.com/s0/0S_FT_u-PZao6wnP/1219971248203/56584bf6c1bc4e5a58c36ea85e9f578a/1417507639811/v340/11/14/9yJPs713S7CD9DgbZgK5aw.mp4
?rate=100

想将这些无效url从数据库中删除,如何得到批量删除sql呢?

vi  invalid_url.txt
:1,$s/^\(.*\)$/delete from tb_video where url='\1';/g

文本会转为:

delete from tb_video where url='http://main.gslb.ku6.com/s3/Q5LrC3SLgLhkgKEw/1229071108665/0abcb9d3ff15cfef9d5bd4b84ae3371c/1417507400981/v498/22/13/N3NAqsrMR12RF4EG0YcJpgB.mp4?rate=200';
delete from tb_video where url='http://main.gslb.ku6.com/s3/UN8gxoBmHkfj_GNS/1234122701846/ff2b38c04ebadbf7e7153c42e3e3b7d9/1417507397293/v532/19/23/VUVHC1lcMRY62NP77rU0UIqw.mp4?rate=100';
delete from tb_video where url='http://main.gslb.ku6.com/s4/0yqP8eDf_UmxuQUs/1234121433821/375d86953ff0c24e44ebb8c69b1465c4/1417508132623/v540/11/32/jUNwAJTSSQFuZxapvACilkOw.mp4?rate=100';

接着 :wq即可

注: 1,$ 表示从第一行到最后一行

 s/^\(.*\)$/delete from tb_video where url='\1';/

 s表示替换 s/old/new/

 ^\(.*\)$ 匹配整个url

 \1代表前面的整个url,也即括号里的内容

 /g 表示全部替换

若用java来实现同样功能的话,代码如下:

String url = "http://www.baidu.com/";
String sql = url.replaceFirst("(.*)", "delete from tb where url = '$1';"); //$1表示前面正则表达式里括号里的内容
System.out.println(sql); //delete from tb where url = 'http://www.baidu.com/';


© 著作权归作者所有

共有 人打赏支持
zgw06629
粉丝 16
博文 54
码字总数 30471
作品 0
海淀
程序员
Shell 中常见的日志统计方法

前面我发布过"Hadoop兮,杀鸡别用牛刀,python+shell实现一般日志文件的查询、统计", 需要结合python, 可能还是有一定的门槛, 现将shell部分剥离出来. 举例一些最基本的日志统计方法. (1)查看...

小水熊
2015/01/26
0
3
利用SQL数据库,实现Exchange的邮件跟踪BI分析

今年一年都没有怎么静下心写点东西,事情很多,变故也很多。上半年在老东家,邮件系统的架构做完了,Exchange2010也有了点了解。上个月,又杀回了北京。北京有很多朋友,也有很多51CTO的朋友...

bisheng.hu
2010/11/16
0
0
深入了解当前ETL中用到的一些基本技术

数据集成是把不同来源、格式和特点的数据在逻辑上或物理上有机地集中,从而为企业提供全面的数据共享,是企业商务智能、数据仓库系统的重要组成部分。ETL是企业数据集成的饕饩龇桨浮N恼麓覧...

bsbforever
06/26
0
0
常用 shell sql 命令

vim添加指定开始的行号 :g/^/ s//=line('.')+765.':'/ vim 将文件所有行合并到一行 在 Normal Mode下执行: ggvGJ 逗号分割的字符串转化成多行 %s/,/r/g gg 用于跳到行首 v 转换成 visual 模...

birdinroom
06/28
0
0
ETL介绍与ETL工具比较

ETL负责将分布的、异构数据源中的数据如关系数据、 ETL工具 旗鼓相当:Datastage与Powercenter: 就Datastage和Powercenter而言,这两者目前占据了国内市场绝大部分的份额,在成本上看水平相...

wl044090432
2017/03/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

49.Nginx防盗链 访问控制 解析php相关 代理服务器

12.13 Nginx防盗链 12.14 Nginx访问控制 12.15 Nginx解析php相关配置(502的问题) 12.16 Nginx代理 扩展 502问题汇总 http://ask.apelearn.com/question/9109 location优先级 http://blog....

王鑫linux
今天
1
0
Nginx防盗链、访问控制、解析php相关配置、Nginx代理

一、Nginx防盗链 1. 编辑虚拟主机配置文件 vim /usr/local/nginx/conf/vhost/test.com.conf 2. 在配置文件中添加如下的内容 { expires 7d; valid_referers none blocked server_names *.tes......

芬野de博客
今天
0
0
spring EL 和资源调用

资源调用 import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.PropertySource;import org.springframework.core.io.Resource;......

Canaan_
今天
1
0
memcached命令行、memcached数据导出和导入

一、memcached命令行 yum装telnet yum install telent 进入memcached telnet 127.0.0.1 11211 命令最后的2表示,两位字节,30表示过期时间(秒) 查看key1 get key1 删除:ctrl+删除键 二、m...

Zhouliang6
今天
1
0
Linux定时备份MySQL数据库

做项目有时候要备份数据库,手动备份太麻烦,所以找了一下定时备份数据库的方法 Linux里有一个 crontab 命令被用来提交和管理用户的需要周期性执行的任务,就像Windows里的定时任务一样,用这...

月夜中徘徊
今天
1
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部