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

数据库表中有一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/';
分类:工作日志 时间:2015-04-27 人气:12
本文关键词: shell
分享到:

相关文章

iOS 开发

Android 开发

Python 开发

JAVA 开发

开发语言

PHP 开发

Ruby 开发

搜索

前端开发

数据库

开发工具

开放平台

Javascript 开发

.NET 开发

云计算

服务器

Copyright (C) codeweblog.com, All Rights Reserved.

CodeWeblog.com 版权所有 闽ICP备15018612号

processed in 0.049 (s). 12 q(s)