分页: 1 / 1

awk问题请教

发表于 : 2009-10-25 20:53
wuguofeng
假设一个日志文件有两个字段,访问的时间和访问的url:
20091022002136;/index.html
20091022002136;/welcome.html
......
要输出每行的url,下一行的时间减去当前行的时间

getline好像也处理不了?

Re: awk问题请教

发表于 : 2009-10-25 21:13
O_O_BOT
; 分割 先存起 延后输出

Re: awk问题请教

发表于 : 2009-10-25 21:19
wuguofeng
O_O_BOT 写了:; 分割 先存起 延后输出
不懂,能说详细点吗?

Re: awk问题请教

发表于 : 2009-10-25 23:20
xzap

代码: 全选

i=1
cat file |while read $j
do
  if  [ $i -eq 1 ]
   then 
    old =`echo $j|awk -F ";"{print $1} `
    oldurl=`echo $j|awk -F ";"{print $2} `
    i=2
 else
   new=`echo $j|awk -F ";"{print $1} `
   newurl=`echo $j|awk -F ";"{print $2} `
   y=`expr  ${new:0:4} - ${old:0:4}`
   m=`expr  ${new:4:2} - ${old:4:2}`
   d=`expr  ${new:6:2} - ${old:6:2}`
   #还有时分秒的自己弄
   echo "$oldurl和$newurl相差$y年$m月$d天"
   old=$new
   oldurl=$newurl
  fi
done
处理时间的减法不知道怎么弄,用了个笨办法,不知道谁指点一下。楼主就将就着看吧,瞎写的,没测试。也就提供个思路

Re: awk问题请教

发表于 : 2009-10-26 0:51
c\nc
我也提供一个bash的时间减法:

代码: 全选

d=20091022002136
date -d "${d:0:8} ${d:9:2}:${d:10:2}:${d:11:2}" +%s
得到 unix time 1256149273,然后使用减法……

Re: awk问题请教

发表于 : 2009-11-09 15:18
wuguofeng
xzap 写了:

代码: 全选

i=1
cat file |while read $j
do
  if  [ $i -eq 1 ]
   then 
    old =`echo $j|awk -F ";"{print $1} `
    oldurl=`echo $j|awk -F ";"{print $2} `
    i=2
 else
   new=`echo $j|awk -F ";"{print $1} `
   newurl=`echo $j|awk -F ";"{print $2} `
   y=`expr  ${new:0:4} - ${old:0:4}`
   m=`expr  ${new:4:2} - ${old:4:2}`
   d=`expr  ${new:6:2} - ${old:6:2}`
   #还有时分秒的自己弄
   echo "$oldurl和$newurl相差$y年$m月$d天"
   old=$new
   oldurl=$newurl
  fi
done
处理时间的减法不知道怎么弄,用了个笨办法,不知道谁指点一下。楼主就将就着看吧,瞎写的,没测试。也就提供个思路

这个倒是可以用,但是效率不高啊,现在每天的日志超过1G了,好长时间都解析不完

Re: awk问题请教

发表于 : 2009-11-09 16:22
xiooli

代码: 全选

xiooli@XIOOLI> cat b
20091022002136;/index.html
20091022002137;/wel.html
20091022002145;/welc.html
20091022002187;/welco.html
20091022002189;/welcome.html
20091022002193;/welcome1.html
20091022002199;/welcome12.html
xiooli@XIOOLI> cat a.awk
{
	interval = $1 - crt_tm
	if(url)print interval,url
	url = $2
	crt_tm = $1
}
xiooli@XIOOLI> awk -F";" -f a.awk b
1 /index.html
8 /wel.html
42 /welc.html
2 /welco.html
4 /welcome.html
6 /welcome1.html

Re: awk问题请教

发表于 : 2009-11-10 11:12
wuguofeng
xiooli 写了:

代码: 全选

xiooli@XIOOLI> cat b
20091022002136;/index.html
20091022002137;/wel.html
20091022002145;/welc.html
20091022002187;/welco.html
20091022002189;/welcome.html
20091022002193;/welcome1.html
20091022002199;/welcome12.html
xiooli@XIOOLI> cat a.awk
{
	interval = $1 - crt_tm
	if(url)print interval,url
	url = $2
	crt_tm = $1
}
xiooli@XIOOLI> awk -F";" -f a.awk b
1 /index.html
8 /wel.html
42 /welc.html
2 /welco.html
4 /welcome.html
6 /welcome1.html

:em11 谢谢!

Re: awk问题请教

发表于 : 2009-11-10 12:08
bones7456

代码: 全选

$ echo '20091022002136;/index.html
20091022002137;/wel.html
20091022002145;/welc.html
20091022002187;/welco.html
20091022002189;/welcome.html
20091022002193;/welcome1.html
20091022002199;/welcome12.html' | awk -F";" '{if(oldt){print $1-oldt,oldurl}oldt=$1;oldurl=$2}'
1 /index.html
8 /wel.html
42 /welc.html
2 /welco.html
4 /welcome.html
6 /welcome1.html
和 xiooli 的差不多。。。

Re: awk问题请教

发表于 : 2009-11-10 12:34
pypcjs
骨头都来了,下面的就看骨头吧。