免费注册 查看新帖 |

Chinaunix

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

文本处理,比较难,谢谢 [复制链接]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
31 [报告]
发表于 2009-04-21 11:33 |只看该作者

回复 #30 jakepain 的帖子

分隔符可以是正则!

何止两个,n个都没有问题。

论坛徽章:
0
32 [报告]
发表于 2009-04-21 11:42 |只看该作者

回复 #31 blackold 的帖子

thanks
我一直以为只能用一个呢

论坛徽章:
0
33 [报告]
发表于 2009-04-21 14:00 |只看该作者

  1. test.sh

  2. #!/bin/bash
  3. IFS=','   #以,作为分隔符
  4. while read line
  5. do
  6.     line=${line/%,/, }   #如果行尾为,则在行尾增加一个空格
  7.     read v1 v2 v3 v4 v5 vo <<<"$line"   #分解行,$vo保存第七个字段
  8.     v1=${v1##*|}  #把v1中|之前的信息去掉
  9.     if [ -z "$vo" ];then   #如果第七个字段是空的,表明是坏数据,输入到baddata.file中
  10.         echo "$line" >> baddata.file
  11.         continue
  12.     fi
  13.     printf "%-9s,%-12s,%-7s,%-8s,%-15s,%-300s\n" "$v1" "$v2" "$v3" "$v4" "$v5" "$vo"   #格式输出
  14. done

复制代码


执行:

  1. ./test.sh < 数据文件
  2. 不足7列的数据保存在当前目录的baddata.file文件中
复制代码

[ 本帖最后由 springwind426 于 2009-4-21 14:04 编辑 ]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
34 [报告]
发表于 2009-04-21 17:21 |只看该作者
原帖由 blackold 于 2009-4-21 11:19 发表
不重建$0,-F[|,]也不会破坏$7。

sorry, 一竿子打翻一船人了。
是的,你的脚本中是用正则取得字段7的,没有这个问题。
顺便说一下,你取字段7的正则条件似乎有点弱,如果文件格式稍有变化可能会不适用。但如果要写强点,可能会需要gawk的posix兼容模式,楼主似乎又没有gawk。还是算了吧。再一次感受到awk的蹩脚正则实现。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
35 [报告]
发表于 2009-04-21 17:34 |只看该作者

回复 #34 woodie 的帖子

别介意。

没错,我只是根据LZ的样本特点来写代码。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP