|
蓝森林 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
谢谢 |
| |