免费注册 查看新帖 |

Chinaunix

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

[文本处理] 文件内的数据抽取 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2015-06-26 09:59 |只看该作者
回复 2# haooooaaa

  • $ awk 'NF==7{print $1,$2,$3,$4,$6}NF==6{print $1,$2,$3,$4,$5}'  3.txt
100.00 与10.00 是对齐的,这个脚本把10.00这种情况往前进了一位

11111111    22222222    333333   100.00 AB失败           
03015810    00015802    226592     10.00 重复
...

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
12 [报告]
发表于 2015-06-26 10:09 |只看该作者
本帖最后由 haooooaaa 于 2015-06-26 10:20 编辑

回复 11# lit_wei
  1. awk 'NF==7{$5=$6;NF=5;print;for(i=1;i<=NF;i++){a[i]=length($i)}}NF==6{NF=5;for(i=1;i<NF;i++){printf("%*s ",a[i],$i)};print $NF}' 2.txt
  2. 11111111 22222222 333333 100.00 AB失败
  3. 03015810 00015802 226592  10.00 重复
复制代码
  1. awk 'NF==7{$5=$6;NF=5;print;t=length($(NF-1))}NF==6{NF=5;printf("%s %s %s %*s %s\n",$1,$2,$3,t,$4,$NF)}' 2.txt
复制代码

论坛徽章:
0
13 [报告]
发表于 2015-06-26 10:32 |只看该作者
回复 12# haooooaaa

这种写法如果前40位数据中不止4列就会发生错误。
   

论坛徽章:
0
14 [报告]
发表于 2015-06-26 10:45 |只看该作者
jason680 发表于 2015-06-26 04:29
回复 1# lit_wei

$ cat FILE



这种写法前面不止4列就会取出错误的文件

论坛徽章:
6
处女座
日期:2014-04-02 16:07:17酉鸡
日期:2014-04-14 10:09:22子鼠
日期:2014-04-17 11:57:30辰龙
日期:2014-09-01 17:14:08戌狗
日期:2014-10-28 12:25:54未羊
日期:2014-11-14 11:31:58
15 [报告]
发表于 2015-06-26 10:46 |只看该作者
  1. sed -r '1{:1;N;$!b1; s/\[\w+\]\[[0-9.]+\] */\n/g; s/\n\n/\n/g;}' o
复制代码

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
16 [报告]
发表于 2015-06-26 14:32 |只看该作者
回复 1# lit_wei

LZ A文件
有小数位的列   没对齐
  1. 11111111    22222222    333333    100.00 AB失败
  2. 03015810    00015802    226592     10.00 重复
  3. 11111111    222    222    333333 2340.00 余额
  4. 456   923    00015802    226592   230.00 失败,A重复
复制代码
查看
  1. #!/usr/bin/python2
  2. # coding: utf-8

  3. import re

  4. my_file = 'A'
  5. FILE = open(my_file)

  6. for line in FILE:
  7.     MAT = re.match(r'^(.{40})(.*?)\s+\[', line)
  8.     NEW = re.sub(r'^(?:\s+)\d+\s+', ' ', MAT.group(2))
  9.     print MAT.group(1) + NEW

  10. FILE.close()

复制代码

论坛徽章:
0
17 [报告]
发表于 2015-06-26 15:13 |只看该作者
本帖最后由 lit_wei 于 2015-06-26 15:14 编辑

回复 16# substr函数

大哥,系统不支持python


   

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
18 [报告]
发表于 2015-06-26 15:36 |只看该作者
回复 17# lit_wei

这个系统不支持python有点扯
perl qq.pl A
  1. #!/usr/bin/perl
  2. # 这个系统不支持python有点扯
  3. while (<>) {
  4.     my ( $forty, $other ) = /^(.{40})(.*?)\s+\[/;
  5.     $other =~ s/^\s+\d+\s+/ /;
  6.     print $forty, $other, "\n";
  7. }

复制代码

论坛徽章:
0
19 [报告]
发表于 2015-06-26 16:04 |只看该作者
本帖最后由 lit_wei 于 2015-06-28 22:11 编辑

回复 18# substr函数
11,14这种数字还是没去掉。

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
20 [报告]
发表于 2015-06-26 18:55 |只看该作者
回复 13# lit_wei
  1. $ awk -F "[" '{if(substr($1,41,3)+1>1){print substr($1,1,40),substr($1,45)}else{print $1}}' 2.txt
  2. 11111111    22222222    333333    100.00 AB失败
  3. 03015810    00015802    226592     10.00 重复
  4. 11111111    222  222    333333   2340.00 余额
  5. 456  923    00015802    226592    230.00 失败,A重复
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP