Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在出现如此多的空格后从一行中删除空格_Mysql_Bash_Awk_Sed - Fatal编程技术网

Mysql 在出现如此多的空格后从一行中删除空格

Mysql 在出现如此多的空格后从一行中删除空格,mysql,bash,awk,sed,Mysql,Bash,Awk,Sed,因此,我试图通过将tomcat访问日志加载到mysql中来进行一些分析。我已经完成了大部分工作,但是合并访问日志中的最后一个条目有点麻烦,它并不总是有相同的空格,并且文件是以空格分隔的。我需要文件中的最后一个字符串来删除空格或替换为逗号或其他占位符 我通过sed处理文件以从文件中删除所有,因此如果我可以向sed命令中添加更多内容来执行此操作,那么如果我需要在sed命令之后运行它,这将非常有用 这是sed命令之前的文件 24.240.97.38---[09/Feb/2015:07:38:23-0

因此,我试图通过将tomcat访问日志加载到mysql中来进行一些分析。我已经完成了大部分工作,但是合并访问日志中的最后一个条目有点麻烦,它并不总是有相同的空格,并且文件是以空格分隔的。我需要文件中的最后一个字符串来删除空格或替换为逗号或其他占位符

我通过sed处理文件以从文件中删除所有,因此如果我可以向sed命令中添加更多内容来执行此操作,那么如果我需要在sed命令之后运行它,这将非常有用

这是sed命令之前的文件

24.240.97.38---[09/Feb/2015:07:38:23-0600]GET/irep/client/Cart/Controller/TempController.js HTTP/1.1 304-网页Mozilla/5.0 iPad;CPU OS 8_1_3,如Mac OS X AppleWebKit/600.1.4 KHTML,如Gecko Version/8.0 Mobile/12B466 Safari/600.1.4
24.240.97.38---[09/Feb/2015:07:38:23-0600]GET/irep/client/Libraries/jquery.mobile.datebox.js HTTP/1.1 304-网页Mozilla/5.0 iPad;CPU OS 8_1_3,如Mac OS X AppleWebKit/600.1.4 KHTML,如Gecko Version/8.0 Mobile/12B466 Safari/600.1.4您可以这样完成剩下的部分:

$ awk 'match($0,/Mozilla.*/){ tgt=substr($0,RSTART); gsub(/[[:space:]]+/,",",tgt); $0 = substr($0,1,RSTART-1) tgt } 1' file
24.240.97.38 - - [09/Feb/2015:07:38:23 -0600] GET /irep/client/Content/css/jquery.mobile.datebox.css HTTP/1.1 304 - webaddress Mozilla/5.0,(iPad;,CPU,OS,8_1_3,like,Mac,OS,X),AppleWebKit/600.1.4,(KHTML,,like,Gecko),Version/8.0,Mobile/12B466,Safari/600.1.4
24.240.97.38 - - [09/Feb/2015:07:38:23 -0600] GET /irep/client/Libraries/Bookmark.js HTTP/1.1 304 - webaddress Mozilla/5.0,(iPad;,CPU,OS,8_1_3,like,Mac,OS,X),AppleWebKit/600.1.4,(KHTML,,like,Gecko),Version/8.0,Mobile/12B466,Safari/600.1.4
但是你应该只使用一个小的,简单的,awk脚本,不管是什么

我看到您刚刚添加了一些预设置的输入,但仍然没有预期的输出,因此:

$ cat file
24.240.97.38 - - [09/Feb/2015:07:38:23 -0600] "GET /irep/client/Cart/Controller/TempController.js HTTP/1.1" 304 - "webpage" "Mozilla/5.0 (iPad; CPU OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4"
24.240.97.38 - - [09/Feb/2015:07:38:23 -0600] "GET /irep/client/Libraries/jquery.mobile.datebox.js HTTP/1.1" 304 - "webpage" "Mozilla/5.0 (iPad; CPU OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4"
$              
$ awk '{gsub(/"/,"")} match($0,/Mozilla.*/){ tgt=substr($0,RSTART); gsub(/[[:space:]]+/,",",tgt); $0 = substr($0,1,RSTART-1) tgt } 1' file
24.240.97.38 - - [09/Feb/2015:07:38:23 -0600] GET /irep/client/Cart/Controller/TempController.js HTTP/1.1 304 - webpage Mozilla/5.0,(iPad;,CPU,OS,8_1_3,like,Mac,OS,X),AppleWebKit/600.1.4,(KHTML,,like,Gecko),Version/8.0,Mobile/12B466,Safari/600.1.4
24.240.97.38 - - [09/Feb/2015:07:38:23 -0600] GET /irep/client/Libraries/jquery.mobile.datebox.js HTTP/1.1 304 - webpage Mozilla/5.0,(iPad;,CPU,OS,8_1_3,like,Mac,OS,X),AppleWebKit/600.1.4,(KHTML,,like,Gecko),Version/8.0,Mobile/12B466,Safari/600.1.4
不同的方法:以下是如何将输入文件转换为CSV文件:

$ cat tst.awk        
BEGIN{
    OFS=","
    print "ipAddr", "dash1", "dash2", "dateTime", "getCmd", "number", "info", "browser"
}
{
    gsub(OFS,";")

    ip = $1

    dash1 = $2
    dash2 = $3

    match($0,/\[[^]]+\]/)
    dt = substr($0,RSTART+1,RLENGTH-2)

    match($0,/"[^"]+"/)
    get = substr($0,RSTART+1,RLENGTH-2)
    $0 = substr($0,RSTART+RLENGTH)

    num = $1
    dash3 = $2

    match($0,/"[^"]+"/)
    info = substr($0,RSTART+1,RLENGTH-2)
    $0 = substr($0,RSTART+RLENGTH)

    match($0,/"[^"]+"/)
    browser = substr($0,RSTART+1,RLENGTH-2)

    print ip, dash1, dash2, dt, get, num, info, browser
}


您的预期输出是什么?您是否意识到[date time]列中有空格和括号?为什么不将其转换为CSV或其他更容易导入的格式?将原始数据添加到OPS中最终将成为一个采集系统。我们的系统都在linux上运行,这些数据最终将存储在MySQL数据库中。直接将这些数据加载到excel中比较容易,但是为了长期的健壮性和数据保留,我希望将数据加载到数据库中,这使得这一过程有点困难。数据库随后将用作excel的数据源,但我们希望查看数月的数据以发现趋势等等,这在直接加载到数据表时是不可用的。很抱歉,没有显示预期的输出。那剧本太棒了,非常感谢。它几乎完全符合需要。我将发布我正在寻找的价值观。您刚刚发布的脚本唯一的问题是它删除了IP地址后面的两个。那些破折号是占位符。我将在OPSo中发布格式,谢谢你的帮助,Ed,我今天似乎有个问题。当对昨天生成的日志运行相同的内容时,我在每一行上都会得到一个语法错误。现在我将把它添加到OP中,如果不看到执行的命令行提示,就很难调试语法错误!!!但是我猜如果您的awk命令在命令行上,或者您使用的是awk-f tst.awk-f文件或awk tst.awk-f文件或其他文件,而不是awk-f tst.awk文件,那么您会在awk命令中留下一个勾号,这样您就告诉awk执行您的数据文件而不是读取它。我正在执行awk-f tst.awk文件>newfileNo,您没有,假设tst.awk包含awk脚本,而文件包含数据。您的错误消息特别指出,awk在执行文件内容时发现语法错误,awk-f tst.awk文件将不执行文件内容。
$ awk -f tst.awk file
ipAddr,dash1,dash2,dateTime,getCmd,number,info,browser
24.240.97.38,-,-,09/Feb/2015:07:38:23 -0600,GET /irep/client/Cart/Controller/TempController.js HTTP/1.1,304,webpage,Mozilla/5.0 (iPad; CPU OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML; like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4
24.240.97.38,-,-,09/Feb/2015:07:38:23 -0600,GET /irep/client/Libraries/jquery.mobile.datebox.js HTTP/1.1,304,webpage,Mozilla/5.0 (iPad; CPU OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML; like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4