免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: Ienovo_qq
打印 上一主题 下一主题

[文本处理] 再发帖,awk怎样得到匹配行之前几行的部分数据,行数不定?[已解决] [复制链接]

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
11 [报告]
发表于 2013-07-25 16:42 |只看该作者
回复 9# Ienovo_qq


    Or:
  1. awk "BEGIN{print \"Data/time\tUser\tData\"}/^Date\/time:/{s1=$2 FS $3}/^User:/{s2=$2}/^Data:/{s3=$2}/^EXECUTED/ || /^ORDERED/{t=\"\t\"; print s1 t s2 t s3}"
复制代码

论坛徽章:
0
12 [报告]
发表于 2013-07-25 16:48 |只看该作者
#!/bin/awk -f
BEGIN{
        FS = "  +"
        ORS = "\t"
        i = 0
        j = 0
       
        while((getline < ARGV[1])){
                j++
                if(index($0,"EXECUTED") || index($0,"ORDERED")){
                        id[i++] = j
                }
        }
        j = 0
        print "\tDate/time\t\tUser\tData\n"
}

{
        if(index($0,"Date/time") || index($0,"User")){
                if(id[j] > NR){
                        print $2
                }
        }
        if(NR == id[j]-3){
                print $0
                print "\n"
                j++
        }
}

论坛徽章:
0
13 [报告]
发表于 2013-07-25 16:50 |只看该作者
唉,yinyueyi真是牛人啊,各种编程都会么,但是是这么回事,我用python写了段代码,远程登录各服务器取相关命令执行LOG,以上的数据文件就是LOG文件,然后在python代码中写这么一段 os.system(xyz.bat)  xyz.bat中放awk命令,这个perl又如何用,能不能就用awk呢?

论坛徽章:
0
14 [报告]
发表于 2013-07-25 17:00 |只看该作者
回复 13# Ienovo_qq
在windows下简单测试了下,可以的

   

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
15 [报告]
发表于 2013-07-25 17:00 |只看该作者
本帖最后由 yinyuemi 于 2013-07-25 17:01 编辑

回复 13# Ienovo_qq

   11楼是awk的,不过。。。
   为么子不用python写呢?不是多难啊~  

论坛徽章:
0
16 [报告]
发表于 2013-07-25 17:20 |只看该作者
回yinyuemi,python和awk都是初学,我看python坛子里有人说python文本处理不如awk,就学awk来着。运行了您的awk命令,输出结果如下
Data/time        User        Data
2013-07-17 150243        MYB20AP1D\CDOMC        RLSTC:CELL=MY4038C,STATE=HALTED;
2013-07-17 150714        MYB20AP1D\CDOMC        RLSTC:CELL=MY4038C,STATE=ACTIVE;
2013-07-17 151109        MYB20AP1D\CDOMC        RLSTC:CELL=MY4044C,STATE=HALTED;
已达到我的要求,多谢多谢。能解释一下/^Date\/time:/{s1=$2 FS $3}/是什么意思吗?

论坛徽章:
0
17 [报告]
发表于 2013-07-25 17:22 |只看该作者
回zxd_echo,您的代码运行输出结果如下:
Date/time                User        Data
        2013-07-17 150243        MYB20AP1D\CDOMC         RLSTC:CELL=MY4038C,STATE=HALTED;       
        2013-07-17 150714        MYB20AP1D\CDOMC         RLSTC:CELL=MY4038C,STATE=ACTIVE;       
        2013-07-17 150721        MYB20AP1D\CDOMC        2013-07-17 151109        MYB20AP1D\CDOMC         RLSTC:CELL=MY4044C,STATE=HALTED;       

有点问题,我先学习下代码。

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
18 [报告]
发表于 2013-07-25 17:24 |只看该作者
本帖最后由 yinyuemi 于 2013-07-25 17:25 编辑

回复 16# Ienovo_qq



Date/time:           2013-07-17 162011
/^Date\/time:/  匹配红色部分
$2 $3 分布是 蓝色和黑色
FS 域分隔符

论坛徽章:
0
19 [报告]
发表于 2013-07-25 17:32 |只看该作者
那又怎么得到EXECUTED或ORDERED之前的这组数据呢,是这段代码吗?/^EXECUTED/ || /^ORDERED/{t=\"\t\"; print s1 t s2 t s3}"

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
20 [报告]
发表于 2013-07-25 18:12 |只看该作者
回复 19# Ienovo_qq


    好比之前的可能需要的数据放进你的口袋里,等需要的时候取出来就行
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP