免费注册 查看新帖 |

Chinaunix

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

[文本处理] 提取括号内数据 [复制链接]

论坛徽章:
1
程序设计版块每日发帖之星
日期:2016-05-04 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-05-04 18:00 |只看该作者 |倒序浏览
有的行有括号,有的行有一组括号(),有的行有两组括号()(),每个括号内有两个数字,有逗号隔开。提取括号内的两个数字,用空格分开。原来一个括号里的两个数字要占一行。附件是一个待处理文本。

例如文本
---------------------------------
   80.0000000000000        8.00000000000000        4.00000000000000     
   4.00000000000000        24.0000000000000        1.00000000000000     
  0.000000000000000E+000  0.000000000000000E+000  0.000000000000000E+000
  1.333333333333333E-002
  -9.03196517310970        1.99999999999800        5.90361146269155     
   1.99999999999800        5.90361231235872        1.99999999999800     
   5.90361231235875        1.99999999999800     
   10.2858284013301       0.000000000000000E+000
(-3.580654501620760E-010,-1.784472163625327E-009)
(0.225066057852569,-0.165873834696735)  (0.325505768511269,-9.488556897954557E-002)
------------------------------------------------------------------------------------------------
提取后变成
-3.580654501620760E-010  -1.784472163625327E-009
0.225066057852569   -0.165873834696735
0.325505768511269   -9.488556897954557E-002

optic2.rar

25.83 KB, 下载次数: 8

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
2 [报告]
发表于 2016-05-04 18:14 |只看该作者
  1. perl -nle 'if(s/\(|\)//g){s/,/ /g;print s/\s{2,}/\n/r}' f
复制代码

论坛徽章:
1
程序设计版块每日发帖之星
日期:2016-05-04 06:20:00
3 [报告]
发表于 2016-05-04 19:07 |只看该作者
回复 2# sunzhiguolu

不好用

]$ perl -nle 'if(s/\(|\)//g){s/,/ /g;print s/\s{2,}/\n/r}' f
Bareword found where operator expected at -e line 1, near "s/\s{2,}/\n/r"
syntax error at -e line 1, near "s/\s{2,}/\n/r"
Execution of -e aborted due to compilation errors.

   

论坛徽章:
0
4 [报告]
发表于 2016-05-04 19:17 |只看该作者
egrep '\(.*\)' testfile|sed -r 's/\(|\)//g' |xargs -n1|sed 's/,/ /g'
我的这条命令简单比较好理解吧!

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
5 [报告]
发表于 2016-05-04 19:35 |只看该作者
回复 3# vcuteym
你提供的示例文件不一样, 试下这个:
  1. perl -nle 'if(s/\A\s*\(|\)\s*\z//g){s/\)\s*\(/\n/ unless(s/,/ /g%2);print}' dat
复制代码

论坛徽章:
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
6 [报告]
发表于 2016-05-04 19:39 |只看该作者
  1. awk -vRS='[()]' -F, 'NR%2==0{print $1,$2}' file
  2. -3.580654501620760E-010 -1.784472163625327E-009
  3. 0.225066057852569 -0.165873834696735
  4. 0.325505768511269 -9.488556897954557E-002
复制代码

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
7 [报告]
发表于 2016-05-04 20:02 |只看该作者
本帖最后由 sunzhiguolu 于 2016-05-04 20:34 编辑
  1. perl -nle '$,="\n";if(s/\A\s*\(|\)\s*\z//g){s/,/ /g;print split /\)\s*\(/}' dat
复制代码

论坛徽章:
4
程序设计版块每日发帖之星
日期:2015-10-14 06:20:00每日论坛发贴之星
日期:2015-10-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-02 06:20:00程序设计版块每日发帖之星
日期:2016-05-08 06:20:00
8 [报告]
发表于 2016-05-04 20:33 |只看该作者
本帖最后由 mswsg 于 2016-05-04 20:56 编辑

站位 干啥

python
  1. with open('optic2.dat', 'r') as f:
  2.     lines = f.readlines()
  3.     for line in lines:
  4.         line = line.strip()
  5.         if line.count('(') == 1:
  6.             line = line.lstrip('(').strip(')').split(',')
  7.             print(line[0], line[1])
  8.         if line.count('(') == 2:
  9.             line1 = line.split()
  10.             for i in line1:
  11.              j = i.lstrip('(').strip(')').split(',')
  12.              print(j[0], j[1])
复制代码

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
9 [报告]
发表于 2016-05-04 20:36 |只看该作者
测试的时候, 行数对了, 结果出问题了.

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
10 [报告]
发表于 2016-05-04 20:37 |只看该作者
回复 8# mswsg
大神来个大 python?

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP