分页: 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

谢谢!
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
骨头都来了,下面的就看骨头吧。