免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 4189 | 回复: 31
打印 上一主题 下一主题

请教一个文件处理的问题,grep根25和70有没有啥关系? [复制链接]

论坛徽章:
1
射手座
日期:2013-09-30 15:24:05
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-05-23 06:49 |只看该作者 |倒序浏览
data:20070304
time:173420
txkind:取款
cardno:123456
stat:success
-------
data:
time:
cardno:
stat:
memo:
---------
类似与这样的日志文件,---- 之间的行数不固定,我要抽取stat=success txkind=取款 cardno= 某些帐号(测试帐号100个左右)的数据文件,并统计笔数。



方法1.用awk--- --- 之间的内容合并到一行,分布过滤取款 成功特定帐号的数据,并统计其笔数(突然想用shell实现呵呵不太熟悉见笑了)
awk‘BEGIN{
if($0== "-------") print "\n"
elif
printf "%s",$0
}’ filename >tmpfile;
grep 'success' tmpfile |grep '取款' >tmp;
grep '123456' tmp >tmp1;
.......
#n多grep ’帐号(123456)‘ >>tmp2
grep -c '$' tmp2;
rm -f -r tmp;
rm -f -r tmp1;
rm -f -r tmp2;

大概好像就是这个东西吧,还望各位老大指点。

[ 本帖最后由 dlms 于 2007-5-23 09:39 编辑 ]

论坛徽章:
1
射手座
日期:2013-09-30 15:24:05
2 [报告]
发表于 2007-05-23 06:58 |只看该作者
问题是我将近300多个文件,统计出来的结果不是70就25,我晕了。
这个是交易日志,不可能的啊

论坛徽章:
1
射手座
日期:2013-09-30 15:24:05
3 [报告]
发表于 2007-05-23 06:59 |只看该作者
grep '123456' tmp >tmp1;
.......
#n多grep ’帐号(123456)‘ >>tmp2;
中间省略了310多个帐号吧,操作如注释的操作

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
4 [报告]
发表于 2007-05-23 08:07 |只看该作者
多行合并成一行。
perl -n -e 'chomp; if (/^------/) {print "\n$_\t";} else {print "$_\t";}' <urfile

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
5 [报告]
发表于 2007-05-23 08:14 |只看该作者
awk‘BEGIN{
if($0== "-------") print "\n"
elif
printf "%s",$0
}’ filename >tmpfile

先说这一个把,不知道是不是你打字的笔误,这个脚本根本执行不了

我先认为它没有语法问题,那我们看看逻辑问题,你所有的操作都写在 BEGIN{}里,对filename根本就没有操作,我想这一个脚本的输出为空.....

论坛徽章:
0
6 [报告]
发表于 2007-05-23 09:03 |只看该作者
gawk确实在BEGIN里面对FILENAME没有定义。但是hp-ux系统自带的awk下,好像有定义。这个问题我以前遇到过。


  1. cat *.log | awk '
  2. BEGIN {
  3.   FS = "[   ]*:[    ]*"
  4.   while ((getline x < "./card_no_list.txt") > 0)
  5.     std[x] ++
  6. }
  7. $1 ~ /-{5,}/ {
  8.   sav_card_no = ""
  9. }
  10. $1 == "cardno" {
  11.   sav_card_no = $2
  12. }
  13. $1 == "stat" && std[sav_card_no] && $2 == "success" {
  14.   print sav_card_no
  15. }'  

  16. 其中
  17. card_no_list.txt  是你关心的帐号列表,每个帐号一行
复制代码

[ 本帖最后由 ivhb 于 2007-5-23 09:06 编辑 ]

论坛徽章:
1
射手座
日期:2013-09-30 15:24:05
7 [报告]
发表于 2007-05-23 09:33 |只看该作者
原帖由 waker 于 2007-5-23 08:14 发表
awk‘BEGIN{
if($0== "-------") print "\n"
elif
printf "%s",$0
}’ filename >tmpfile

先说这一个把,不知道是不是你打字的笔误,这个脚本根本执行不了

我先认为 ...

我在运行的时候没有加BEGIN

awk '{
  if($0 == "------------------------------------") print '\n'
  else printf "%s",$0;
}' $1 >tmp
grep "SUCCESS" tmp >tmp1;
grep "WITHDRAWAL" tmp1 >tmp4;
rm -f -r tmp1;
rm -f -r tmp;
原脚本是这样的,这个我测试了下没有问题。
但是随后对tmp4,进行316个grep “帐号” >>tmp5;里面有问题(第一次定向用的是>,其余315次用的是>>)

grep "921213600000236352" tmp4 >tmp5;
grep "921213600000281515" tmp4 >>tmp5;
grep "921213600000373817" tmp4 >>tmp5;
grep "921213600000354379" tmp4 >>tmp5;
grep "921213600000354387" tmp4 >>tmp5;
.......
grep -c "$" tmp5;

论坛徽章:
0
8 [报告]
发表于 2007-05-23 09:39 |只看该作者
grep "921213600000236352" tmp4 >tmp5;

我不知道你是否在循环里面做的,如果是那样,每个文件都要清空一次? 以前的怎么保留?

论坛徽章:
1
射手座
日期:2013-09-30 15:24:05
9 [报告]
发表于 2007-05-23 09:42 |只看该作者
原帖由 ivhb 于 2007-5-23 09:03 发表
gawk确实在BEGIN里面对FILENAME没有定义。但是hp-ux系统自带的awk下,好像有定义。这个问题我以前遇到过。

[code]
cat *.log | awk '
BEGIN {
  FS = "[   ]*:[    ]*"
  while ((getline x < ...

我没太看懂这个脚本,我的用意不是要取出帐号,我是有一个保存帐号的文件,我是要用这个文件里的帐号去在前面过滤好的那个文件,再过滤(实现方法有点笨,我把所以的帐号都grep了一遍,最后重定向了一下,其实我要得到的就是数量就行了),老大见笑了,我还在学习中

论坛徽章:
1
射手座
日期:2013-09-30 15:24:05
10 [报告]
发表于 2007-05-23 09:43 |只看该作者
原帖由 ivhb 于 2007-5-23 09:39 发表
grep "921213600000236352" tmp4 >tmp5;

我不知道你是否在循环里面做的,如果是那样,每个文件都要清空一次? 以前的怎么保留?

不是在循环里面做的,我第二次用的是>>追加,第一次用的>应该不会清空吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP