当前位置: 技术问答>linux和unix
帮忙解析下这段日志,awk或者sed。
来源: 互联网 发布时间:2017-02-02
本文导语: - 113.133.123.123 2012-02-10 14:00:03 "GET http://stat.abc.com:3128/aop?a=123&b=23&c=24d=200|ab122|a12|sd1223d|324&e=2321" - 219.114.114.123 2012-02-10 14:00:03 "GET http://stat.abc.com:3128/aop?a=123&b=23&c=24d=200|ab12|2|asd|324&e=2321" 119.41.13.17 113.31.123.123 20...
- 113.133.123.123 2012-02-10 14:00:03 "GET http://stat.abc.com:3128/aop?a=123&b=23&c=24d=200|ab122|a12|sd1223d|324&e=2321"
- 219.114.114.123 2012-02-10 14:00:03 "GET http://stat.abc.com:3128/aop?a=123&b=23&c=24d=200|ab12|2|asd|324&e=2321"
119.41.13.17 113.31.123.123 2012-02-10 14:00:03 "GET http://stat.abc.com:3128/aop?a=123&b=23&c=24d=200|ab|122|asd|324&e=2321"
- 211.139.21.197 2012-02-10 14:00:03 "GET http://stat.abc.com:3128/aop?a=123&b=23&c=24d=200|ab1|22|2d|324&e=2321"
- 112.65.123.232 2012-02-10 14:00:03 "GET http://stat.abc.com:3128/aop?a=123&b=23&c=24d=200|a222|asd|324&e=2321"
221.21.11.121 113.31.1.27 2012-02-10 14:00:03 "GET http://stat.abc.com:3128/aop?a=123&b=23&c=24d=200|ab|asd|324&e=2321"
字段用两个空格分隔。
以下是一行:
- 113.133.123.123 2012-02-10 14:00:03 "GET http://stat.abc.com:3128/aop?a=123&b=23&c=24d=200|ab122|asd|324&e=2321"
我想要的结果如下,用tab分隔。
ip+"t"+a+"t"+ b+"t"+ c+"t"+ 200+"t"+ab122|asd+"t"+324+"t"+e
红色部分是d参数解析出来的。
ip;有两个ip的,只取第一个ip,第一个为“-”取第二个ip
求帮忙,我就会分割出来,分出来的就不会了。求个完整的
|
一个awk脚本,一堆sub搞定
楼主给出的数据文件存为data,结果如下
# cat ./parse.awk
#!/usr/bin/awk -f
BEGIN {
FS=" |="
}
{
ip=$1
if (ip == "-")
ip = $2
gsub(/[^0-9]/, "", $5)
gsub(/[^0-9]/, "", $6)
gsub(/[^0-9]/, "", $7)
gsub(/[^0-9]/, "", $9)
n=split($8, d, "|")
gsub(/[^0-9]/, "", d[n])
sub(/[0-9]*|/, "", $8)
sub(/|[0-9]*&e$/, "", $8)
print ip,$5,$6,$7,d[1],$8,d[n],$9
}
楼主给出的数据文件存为data,结果如下
# ./parse.awk data
113.133.123.123 123 23 24 200 ab122|a12|sd1223d 324 2321
219.114.114.123 123 23 24 200 ab12|2|asd 324 2321
119.41.13.17 123 23 24 200 ab|122|asd 324 2321
211.139.21.197 123 23 24 200 ab1|22|2d 324 2321
112.65.123.232 123 23 24 200 a222|asd 324 2321
221.21.11.121 123 23 24 200 ab|asd 324 2321
|
写了一部分看看。
$ sed -r -n '/^-.*$/s/^.*(([0-9]{3}(.|b)){4}).*a=([0-9]+)&b=([0-9]{2})&c=([0-9]+)d=([0-9]+)|(.*)|([0-9]{3}).*$/1 2 3 5 6 7 8 9/p' file
113.133.123.123 123 23 24 200 ab122|a12|sd1223d 324
219.114.114.123 123 23 24 200 ab12|2|asd 324