免费注册 查看新帖 |

Chinaunix

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

[文本处理] 求一个思路,一个文件拆分后的思路 [复制链接]

论坛徽章:
2
2015年亚洲杯之巴勒斯坦
日期:2015-02-15 12:11:292015年辞旧岁徽章
日期:2015-03-03 16:54:15
11 [报告]
发表于 2011-09-17 22:09 |只看该作者
en .也是赞同使用TIM的方法:awk

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
12 [报告]
发表于 2011-09-17 22:29 |只看该作者
回复 1# lightning


    方便的话贴点数据吧楼主

论坛徽章:
0
13 [报告]
发表于 2011-09-18 13:50 |只看该作者
应大家要求我将原数据贴出,经过grep id 后的数据

日志中,第一类日志:

/abc/aaa_09152011:[15/09/2011 01:28:38:613 CST] AppFac/com.bbb.abba.api.appFac: Client configuration for action=userAuth is [AP=3.1.5.167;ID=710036098;AS=7;RID=03A7FE80;FWR=CD30;CID=53;IN=710036098;CP=e;RND=75C7B61BCE854DB1B31A4AA8978EEF9B;N=1000056512;CLD=16781312;LN=zhcn;IID=0;ST=L=2364;TZ=28800;DN=;DIF=;RAWAPI=3.1.5.167]
/abc/aaa_09152011:[15/09/2011 01:28:39:694 CST] AppFac/com.bbb.abba.api.appFac: Client configuration for action=userAuth is [SC=16781312;AP=3.1.5.145;ID=650013208;AS=7;RID=1F605980;FWR=3293;CID=53;IN=650013208;CP=e;RND=90BF88495ECE320D81BD718D27069EC7;N=1000056512;CLD=16781312;LN=zhcn;IID=0;ST=L=40065;TZ=28800;DN=;DIF=;RAWAPI=3.1.5.145]
/abc/aaa_09152011:[15/09/2011 22:42:55:654 CST] AppFac/com.bbb.abba.api.appFac: Client configuration for action=getMsg&msgID=1 is [SC=16781312;AP=3.1.5.145;ID=241695284;AS=7;RID=A6E53BE5;FWR=3001;CID=53;IN=241695284;CP=e;RND=00CE58723237CE4A4F2C32B103AC62B0;N=1000132973;CLD=16781312;LN=zhcn;IID=0;ST=L=90100;TZ=28800;DN=;DIF=;RAWAPI=3.1.5.145]

第一类日志经过处理后,需要得出如下记录:

15/09/2011 01:28:38:613 CST,userAuth,,,,,,,,,,,,3.1.5.167,710036098,7,03A7FE80,CD30,53,710036098,e,75C7B61BCE854DB1B31A4AA8978EEF9B,1000056512,16781312,zhcn,0,,2364,28800,,,3.1.5.167,,,,,,,,,,,,,,
15/09/2011 01:28:39:694 CST,userAuth,,,,,,,,,,,16781312,3.1.5.145,650013208,7,1F605980,3293,53,650013208,e,90BF88495ECE320D81BD718D27069EC7,1000056512,16781312,zhcn,0,,40065,28800,,,3.1.5.145,,,,,,,,,,,,,,
15/09/2011 22:42:55:654 CST,getMsg,,,,,,,,,,1,16781312,3.1.5.145,241695284,7,A6E53BE5,3001,53,1695284,e,00CE58723237CE4A4F2C32B103AC62B0,1000132973,16781312,zhcn,0,,90100,28800,,,3.1.5.145,,,,,,,,,,,,,,

数据以逗号分隔。
以上数据是根据 “等号” 为基础将 左边的为字段名(变量),右边的为数值,取得两者记录后生成的新文件。
中括号内外都需要提取
以下提供一下 第三类数据,思路一样只是取得的方法更加麻烦,中括号外数据多了点,另外需要取得returns 的值。

/abc/aaa_09152011:[15/09/2011 06:27:23:811 CST] AppFac/com.bbb.abba.api.appFac: appBuilder on action=msgPkgDeleteACK&appID=12831713&price=455118536&time=1000074117&ID=80127&hw=DEBE60BB36B78CC77BC36D850A1458AD&repeat=12 returns 401 status=0
/abc/aaa_09152011:[15/09/2011 06:27:24:708 CST] AppFac/com.bbb.abba.api.appFac: Client configuration for action=msgPkgDeleteACK&appID=13066620&price=479938200&time=999827776&ID=571700982&hw=456CBA28ED71279E1A35B488804F97FF is [SC=16781312;AP=3.1.5.186;ID=571700982;AS=7;RID=817DB7A3;FWR=v1.03;CID=53;IN=571700982;CP=e;RND=019D63AFB0C678CC2BB7C49FCFFF7E69;N=1000074445;CLD=16781312;LN=zhcn;IID=0;ST=L=110006;TZ=28800;DN=58865766;DIF=;RAWAPI=3.1.5.186]
/abc/aaa_09152011:[15/09/2011 06:27:25:862 CST] AppFac/com.bbb.abba.api.appFac: appBuilder on action=msgPkgDeleteACK&appID=13066620&price=479938200&time=999827776&ID=571700982&hw=456CBA28ED71279E1A35B488804F97FF returns 200 status=0

请问大家有什么好办法吗? 当然有些等号后的数值由于很妖怪,有特殊字符,所以需要处理一下,故原先脚本比较复杂。
这些数据都在一个文件中,暂时没有区分开。

论坛徽章:
0
14 [报告]
发表于 2011-09-18 20:51 |只看该作者
呃,没有兄弟能帮忙看看吗?

论坛徽章:
0
15 [报告]
发表于 2011-09-18 23:13 |只看该作者
本帖最后由 ywlscpl 于 2011-09-18 23:35 编辑

回复 14# lightning
但愿楼主不要挤牙膏
  1. ywlscpl@ubuntu:~$ cat file
  2. /abc/aaa_09152011:[15/09/2011 01:28:38:613 CST] AppFac/com.bbb.abba.api.appFac: Client configuration for action=userAuth is [AP=3.1.5.167;ID=710036098;AS=7;RID=03A7FE80;FWR=CD30;CID=53;IN=710036098;CP=e;RND=75C7B61BCE854DB1B31A4AA8978EEF9B;N=1000056512;CLD=16781312;LN=zhcn;IID=0;ST=;PL=2364;TZ=28800;DN=;DIF=;RAWAPI=3.1.5.167]
  3. /abc/aaa_09152011:[15/09/2011 01:28:39:694 CST] AppFac/com.bbb.abba.api.appFac: Client configuration for action=userAuth is [SC=16781312;AP=3.1.5.145;ID=650013208;AS=7;RID=1F605980;FWR=3293;CID=53;IN=650013208;CP=e;RND=90BF88495ECE320D81BD718D27069EC7;N=1000056512;CLD=16781312;LN=zhcn;IID=0;ST=;PL=40065;TZ=28800;DN=;DIF=;RAWAPI=3.1.5.145]
  4. /abc/aaa_09152011:[15/09/2011 22:42:55:654 CST] AppFac/com.bbb.abba.api.appFac: Client configuration for action=getMsg&msgID=1 is [SC=16781312;AP=3.1.5.145;ID=241695284;AS=7;RID=A6E53BE5;FWR=3001;CID=53;IN=241695284;CP=e;RND=00CE58723237CE4A4F2C32B103AC62B0;N=1000132973;CLD=16781312;LN=zhcn;IID=0;ST=;PL=90100;TZ=28800;DN=;DIF=;RAWAPI=3.1.5.145]
  5. /abc/aaa_09152011:[15/09/2011 06:27:23:811 CST] AppFac/com.bbb.abba.api.appFac: appBuilder on action=msgPkgDeleteACK&appID=12831713&price=455118536&time=1000074117&ID=80127&hw=DEBE60BB36B78CC77BC36D850A1458AD&repeat=12 returns 401 status=0
  6. /abc/aaa_09152011:[15/09/2011 06:27:24:708 CST] AppFac/com.bbb.abba.api.appFac: Client configuration for action=msgPkgDeleteACK&appID=13066620&price=479938200&time=999827776&ID=571700982&hw=456CBA28ED71279E1A35B488804F97FF is [SC=16781312;AP=3.1.5.186;ID=571700982;AS=7;RID=817DB7A3;FWR=v1.03;CID=53;IN=571700982;CP=e;RND=019D63AFB0C678CC2BB7C49FCFFF7E69;N=1000074445;CLD=16781312;LN=zhcn;IID=0;ST=;PL=110006;TZ=28800;DN=58865766;DIF=;RAWAPI=3.1.5.186]
  7. /abc/aaa_09152011:[15/09/2011 06:27:25:862 CST] AppFac/com.bbb.abba.api.appFac: appBuilder on action=msgPkgDeleteACK&appID=13066620&price=479938200&time=999827776&ID=571700982&hw=456CBA28ED71279E1A35B488804F97FF returns 200 status=0
  8. ywlscpl@ubuntu:~$ awk -F= -v v=",,,,,,,,,,," '{split($1,m,"[][]");printf m[2];for (i=2;i<=NF;i++) {delete n;sub(/%/,"0",$i);if ($i~/returns/) split($i,n,"returns ");sub(/[][; &].*$/,"",$i);printf ","$i""(n[1]?","n[2]+0:"");if (i==2) printf v;if (i==NF) printf v",,,"}print ""}' file
  9. 15/09/2011 01:28:38:613 CST,userAuth,,,,,,,,,,,,3.1.5.167,710036098,7,03A7FE80,CD30,53,710036098,e,75C7B61BCE854DB1B31A4AA8978EEF9B,1000056512,16781312,zhcn,0,,2364,28800,,,3.1.5.167,,,,,,,,,,,,,,
  10. 15/09/2011 01:28:39:694 CST,userAuth,,,,,,,,,,,,16781312,3.1.5.145,650013208,7,1F605980,3293,53,650013208,e,90BF88495ECE320D81BD718D27069EC7,1000056512,16781312,zhcn,0,,40065,28800,,,3.1.5.145,,,,,,,,,,,,,,
  11. 15/09/2011 22:42:55:654 CST,getMsg,,,,,,,,,,,,1,16781312,3.1.5.145,241695284,7,A6E53BE5,3001,53,241695284,e,00CE58723237CE4A4F2C32B103AC62B0,1000132973,16781312,zhcn,0,,90100,28800,,,3.1.5.145,,,,,,,,,,,,,,
  12. 15/09/2011 06:27:23:811 CST,msgPkgDeleteACK,,,,,,,,,,,,12831713,455118536,1000074117,80127,DEBE60BB36B78CC77BC36D850A1458AD,12,401,0,,,,,,,,,,,,,,
  13. 15/09/2011 06:27:24:708 CST,msgPkgDeleteACK,,,,,,,,,,,,13066620,479938200,999827776,571700982,456CBA28ED71279E1A35B488804F97FF,16781312,3.1.5.186,571700982,7,817DB7A3,v1.03,53,571700982,e,019D63AFB0C678CC2BB7C49FCFFF7E69,1000074445,16781312,zhcn,0,,110006,28800,58865766,,3.1.5.186,,,,,,,,,,,,,,
  14. 15/09/2011 06:27:25:862 CST,msgPkgDeleteACK,,,,,,,,,,,,13066620,479938200,999827776,571700982,456CBA28ED71279E1A35B488804F97FF,200,0,,,,,,,,,,,,,,
  15. ywlscpl@ubuntu:~$
复制代码

论坛徽章:
0
16 [报告]
发表于 2011-09-19 07:44 |只看该作者
回复  lightning
但愿楼主不要挤牙膏
ywlscpl 发表于 2011-09-18 23:13



    我确实忘说一件事情了,我这里是solaris 系统 ,awk扩展性不好

论坛徽章:
0
17 [报告]
发表于 2011-09-19 07:54 |只看该作者
回复  lightning
但愿楼主不要挤牙膏
ywlscpl 发表于 2011-09-18 23:13



    我找了一个linux 设备执行脚本 ,出现以下问题

[root@localhost home]#  awk -F= -v v=",,,,,,,,,,," '{split($1,m,"[][]");printf m[2];for (i=2;i<=NF;i++) {delete n;sub(/%/,"0",$i);if ($i~/returns/) split($i,n,"returns ");sub(/[][; &].*$/,"",$i);printf ","$i""(n[1]?","n[2]+0:"");if (i==2) printf v;if (i==NF) printf v",,,"}print ""}' test.txt > test1.txt
awk: cmd. line:1: (FILENAME=test.txt FNR=51) fatal: not enough arguments to satisfy format string
        `,any,076%7E%5E%A6'
                  ^ ran out for this one


日志中有这类 数据 action=getItemList&search=any,%76%7E%5E%A6 is   , 当时我将& 替换为;号,但是 search 的值 是any 中间加“,” 加一串字符,后来我再处理的时候摒弃了search 的值,因为 不太好录入。

论坛徽章:
0
18 [报告]
发表于 2011-09-19 08:05 |只看该作者
回复  lightning
但愿楼主不要挤牙膏
ywlscpl 发表于 2011-09-18 23:13



    还有大侠对于之前处理完日志后有多个,,,,,,理解错误了,我不是需要输入这么多逗号,而是因为“每条日志的字段不同”,不可能30多个字段都有值,所以没有值得为空,所以产生了那么多逗号。 谢谢。 之所以需要对字段位置整理,是因为要整理好字段的排列顺序以便于入数据库,所以需要在导入新文件的时候按照一定的字段排列,否则无法通过sqlldr 入库了。

如我之前的脚本 就是 通过 eval 取出字段值,然后通过echo 写入文件, 在echo的时候我规定了每个字段所处的位置,即排列顺序。

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
19 [报告]
发表于 2011-09-19 10:21 |只看该作者
下载便一个GNU的awk

论坛徽章:
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
20 [报告]
发表于 2011-09-19 11:08 |只看该作者
楼主:有多少个多少个键是确定的么?
这些键=值对儿在第记录中的顺序是确定的么?
结果中的顺序又是什么样的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP