awk问题请教

sh/bash/dash/ksh/zsh等Shell脚本
回复
wuguofeng
帖子: 10
注册时间: 2006-11-19 9:28

awk问题请教

#1

帖子 wuguofeng » 2009-10-25 20:53

假设一个日志文件有两个字段,访问的时间和访问的url:
20091022002136;/index.html
20091022002136;/welcome.html
......
要输出每行的url,下一行的时间减去当前行的时间

getline好像也处理不了?
头像
O_O_BOT
帖子: 2461
注册时间: 2009-05-20 19:32

Re: awk问题请教

#2

帖子 O_O_BOT » 2009-10-25 21:13

; 分割 先存起 延后输出
irc 聊天室
ubuntu-cn 的irc 频道为
irc.ubuntu.com 8001 #ubuntu-cn
UTF8编码 可用 irssi xchat pidgin weechat 登录

http://webchat.freenode.net/?channels=ubuntu-cn
[url]irc://irc.freenode.net/ubuntu-cn[/url]
wuguofeng
帖子: 10
注册时间: 2006-11-19 9:28

Re: awk问题请教

#3

帖子 wuguofeng » 2009-10-25 21:19

O_O_BOT 写了:; 分割 先存起 延后输出
不懂,能说详细点吗?
头像
xzap
帖子: 256
注册时间: 2006-08-24 21:25

Re: awk问题请教

#4

帖子 xzap » 2009-10-25 23:20

代码: 全选

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
处理时间的减法不知道怎么弄,用了个笨办法,不知道谁指点一下。楼主就将就着看吧,瞎写的,没测试。也就提供个思路
头像
c\nc
帖子: 231
注册时间: 2007-12-25 12:51

Re: awk问题请教

#5

帖子 c\nc » 2009-10-26 0:51

我也提供一个bash的时间减法:

代码: 全选

d=20091022002136
date -d "${d:0:8} ${d:9:2}:${d:10:2}:${d:11:2}" +%s
得到 unix time 1256149273,然后使用减法……
wuguofeng
帖子: 10
注册时间: 2006-11-19 9:28

Re: awk问题请教

#6

帖子 wuguofeng » 2009-11-09 15:18

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了,好长时间都解析不完
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

Re: awk问题请教

#7

帖子 xiooli » 2009-11-09 16:22

代码: 全选

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
wuguofeng
帖子: 10
注册时间: 2006-11-19 9:28

Re: awk问题请教

#8

帖子 wuguofeng » 2009-11-10 11:12

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 谢谢!
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

Re: awk问题请教

#9

帖子 bones7456 » 2009-11-10 12:08

代码: 全选

$ 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 的差不多。。。
关注我的blog: ε==3
pypcjs
帖子: 61
注册时间: 2005-11-15 23:10

Re: awk问题请教

#10

帖子 pypcjs » 2009-11-10 12:34

骨头都来了,下面的就看骨头吧。
回复