蓝森林首页 | 返回主页 | 本站地图 | 站内搜索 | 联系信箱 |
 您目前的位置:首页 > 自由软件 > 技术交流 > 应用编程


    

蓝森林 http://www.lslnet.com 2006年6月26日 11:18


请教一个文本处理的问题

一个日志文件
我想把含有usernames这个字符串的行之间的部分取出来做处理(第二个usernames所在的行一定是整个日志文件的最末行)

[code]
# -usernames-
quekehanmu
0 8692 5614 54422269 18 1084986808
kyo
0 1153 823 9969817 3 1084921564
image
0 7453 3641 33544878 16 1085007515
# End Of Table - usernames
[/code]

上面这个例子反应了三个用户的情况
例如:
quekehanmu是用户名(user)
8692是访问次数(hits)
5614是文件数目(files)
54422269是流量大小(flow)
现在要求对于每个用户都生成如下三个文件
假如还是对于quekehanmu这个用户来说
生成的文件为:
quekehanmu.hits 内容是8692
quekehanmu.files 内容是5614
quekehanmu.flow 内容是5442269

依此类推,

不知道我描述清楚没有,唉……嘴笨没有办法

请教一个文本处理的问题

试试吧
eval 'sed -n '/usernames/,/usernames/p' infile |nawk '$0!~/usernames/{if(NF==1){name=$0;next;}printf("echo %s >%s.hits;echo %s >%s.file;echo %s >%s.flow;",$2,$2,$3,$3,$4,$4)}'

请教一个文本处理的问题

#split

#! /usr/bin/awk -f
/usernames/
{
getline;
while($0 !~ /username/){
   name=$1;
   getline;
   print $2>name".hits"
   print $3>name".files"
   print $4>name".flow"
   getline;
}
}

awk -f split filename

请教一个文本处理的问题

-->


谢谢!
nawk是sco上面的乜……

linux下面用awk的话要怎么改呢?

请教一个文本处理的问题

-->


many more thanks

我用你这个脚本的时候,稍微有些不满足要求,单独使用这个脚本,它会把日志文件中除了usernames之间的行也输出到文件,可能是我题目没有描述怎么清楚,不过您的这个split已经帮我解决了大问题了,
所以把两位的回答稍微综合了一下

先对日志进行
sed -n '/usernames/,/usernames/p' 操作
把含有usernames之间的所有行定向到另外一个文本中
然后用您的这个split再处理这个文本,结果非常perfect

谢谢



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 蓝森林网站 版权所有。 E-mail : webmaster@lslnet.com