免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1847 | 回复: 5

[文本处理] 跪求文档处理 [复制链接]

论坛徽章:
0
发表于 2014-11-25 14:48 |显示全部楼层
本帖最后由 mazuju099 于 2014-11-25 14:50 编辑

有这样一个文件1.file
1     'x, z, y'
2     'z, -x+.25, -y+.25'


我希望能从上面的文件获得下面的文件2.file
1
1 0 0  0
0 0 1  0
0 1 0  0

2
0  0 1  0
-1 0 0 0.25
0 -1 0 0.25



1.file和2.file的关系是这样的:将1.file的每一行转化为一个3*4的矩阵,并标上顺序。
这个3*4的矩阵的每一行从 '   '内的字母和数字提取。数字放到最后。
例如,
如果是x, 那么这一行就是 1 0 0 0
如果是x+.25,那么这一行就是  1 0 0 0.25
如果是-x+.25,那么这一行就是 -1 0 0 0.25
如果是y, 那么这一行就是 0 1 0 0
如果是y+.5, 那么这一行就是 0 1 0 0.5

论坛徽章:
0
发表于 2014-11-25 16:25 |显示全部楼层
本帖最后由 zerostudy 于 2014-11-25 16:29 编辑

请试下下面代码:
  1. # sed 's/\s//g;s/'\''/,/g;s/,$//g' c | awk -F, 'BEGIN{a["x"]="1 0 0 0";a["z"]="0 0 1 0";a["y"]="0 1 0 0"}{print $1;for(i=2;i<=NF;i++){if(length($i)==1){print a[$i];}else{num=gensub(/.*\+(.*)/,"\\1",1,$i);xo=gensub(/-?([a-zA-Z])\+.*/,"\\1",1,$i);chk=substr($i,1,1);if(chk=="-"){print "-"a[xo]num}else{print a[xo]num}}}}'
  2. 1
  3. 1 0 0 0
  4. 0 0 1 0
  5. 0 1 0 0
  6. 2
  7. 0 0 1 0
  8. -1 0 0 0.25
  9. -0 1 0 0.25
  10. [root@nsdctest shell]#
复制代码
-y+.25 不是-0 1 0 0.25吗?

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
发表于 2014-11-26 10:08 |显示全部楼层
  1. [root@localhost ~]# awk '{print $1;gsub(/[\047,]/,"");for(i=1;i++<NF;){x="1 0 0 0";y="0 1 0 0";z="0 0 1 0";if($i~/x/)s=x;else if($i~/y/)s=y;else s=z;if($i~/-/)sub(/1/,"-1",s);if($i~/\+/){sub(/[^.]+/,"",$i);s=s$i};print s;s=""}}' i
  2. 1
  3. 1 0 0 0
  4. 0 0 1 0
  5. 0 1 0 0
  6. 2
  7. 0 0 1 0
  8. -1 0 0 0.25
  9. 0 -1 0 0.25
  10. [root@localhost ~]#
复制代码

论坛徽章:
0
发表于 2014-11-26 17:12 |显示全部楼层
回复 2# zerostudy


    十分感谢。

论坛徽章:
0
发表于 2014-11-26 17:13 |显示全部楼层
回复 3# yestreenstars


    楼上强大啊。谢谢哈。

论坛徽章:
22
处女座
日期:2014-10-11 13:33:292015亚冠之塔什干火车头
日期:2015-07-20 19:59:042015亚冠之塔什干火车头
日期:2015-07-26 10:59:31程序设计版块每日发帖之星
日期:2015-08-05 06:20:00每日论坛发贴之星
日期:2015-08-05 06:20:00程序设计版块每日发帖之星
日期:2015-08-07 06:20:00每日论坛发贴之星
日期:2015-08-07 06:20:002015亚冠之阿尔纳斯尔
日期:2015-10-01 15:23:28白银圣斗士
日期:2015-12-07 17:17:06操作系统版块每日发帖之星
日期:2015-12-27 06:20:002015亚冠之广州富力
日期:2015-07-08 15:48:31程序设计版块每日发帖之星
日期:2015-06-11 22:20:00
发表于 2014-11-27 01:03 |显示全部楼层
笨一点的方法,
  1. sed -e s/\'//g -e 's/[ ,]/\n/g;s/+//g;s/x/1000/;s/y/0100/;s/z/0010/' file |column -t
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP