免费注册 查看新帖 |

Chinaunix

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

[文本处理] 一个文本处理,求助 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-11 14:29 |只看该作者 |倒序浏览
本帖最后由 volwang 于 2013-05-11 15:46 编辑

有1文本求助大家。
file:
ab [123], cd [234], efde [1-2-3], e f x d [/1/2/3], ed [123], s x [234], efde [1-2-3], e f ef  t f [/1/2/3];


要求输出:
ab:123
cd:234
efde:1-2-3-4
x d:/1/2/3
ed:123
s x:234
efde:1-2-3
t f:/1/2/3

说明:
按每一个 ] 来分割字段,输出[ ]前面的字段,和[ ]中的内容。
当[ ]前面的字段为一个字符时,输入1个字符;为多个字符时,输入倒数2个字符。

只要得到如上结果就行,怎么处理方法不重要。谢谢。

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
2 [报告]
发表于 2013-05-11 15:01 |只看该作者
  1. echo "ab [123], cd [234], efde [1-2-3], e f x d [/1/2/3], ed [123], s x [234]efde [1-2-3], e f ef  t f [/1/2/3];" | tr '[],;' ': \n '
复制代码
“当[ ]前面的字段为一个字符时,输入1个字符;为多个字符时,输入倒数2个字符。” 看不懂

论坛徽章:
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
3 [报告]
发表于 2013-05-11 15:23 |只看该作者
efde:1-2-3-4
为什么会多出个4?

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
4 [报告]
发表于 2013-05-11 15:28 |只看该作者
  1. awk -F '[][]' '{gsub(/[,;]/,"");
  2.            for (i=1;i<NF;i=i+2)
  3.                  { l=split($i,a," ");
  4.                     print a[l-1],a[l] " : " $(i+1) OFS
  5.                  }
  6.         }' infile
复制代码

论坛徽章:
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
5 [报告]
发表于 2013-05-11 15:37 |只看该作者
s x [234]efde [1-2-3]
这中间是不是少了个逗号啊?
  1. awk -F, '{for(i=1;i<=NF;i++){split($i,a,"[][]");l=split(a[1],b," ");if(l>1)print b[l-1],b[l]": "a[2];else print b[1]": "a[2]}}'
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2013-05-11 15:49 |只看该作者
不好意思啊。file少了个,
关于当[ ]前面的字段为一个字符时,输入1个字符;为多个字符时,输入倒数2个字符。的解释:
例如 ab [123], cd [234], []前只有1个字符,输出这个字符。
当 []前有多个字符,输入倒数2个字符。例如:e f x d [/1/2/3], s x [234],输出x d, s x即可。
注意空格。

回复 5# yestreenstars


   

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
7 [报告]
发表于 2013-05-11 16:01 |只看该作者
“当[ ]前面的字段为一个字符时,输入1个字符;为多个字符时,输入倒数2个字符。”

看了楼上的代码才确定,楼主这句话的意思是:只取[ ]前面的两个非空字符
  1. 输出文本 | tr '[],;' ': \n ' | sed 's/.*\([^ ][ ]*[^ ][ ]*:\)/\1/'
复制代码

论坛徽章:
0
8 [报告]
发表于 2013-05-11 20:40 |只看该作者
echo "ab [123], cd [234], efde [1-2-3], e f x d [/1/2/3], ed [123], s x [234], efde [1-2-3], e f ef  t f [/1/2/3];" | awk 'BEGIN{FS="],";OFS="|"}{NF+=0;print $0}'| awk 'BEGIN{FS="[";OFS=":"}{NF+=0;print $0}' | awk 'BEGIN{RS="|"}{NF+=0;print $0}'

论坛徽章:
13
丑牛
日期:2013-08-16 15:08:22技术图书徽章
日期:2013-11-26 10:13:40双鱼座
日期:2013-11-08 15:03:26戌狗
日期:2013-11-08 13:52:30技术图书徽章
日期:2013-11-05 14:06:30戌狗
日期:2013-10-31 11:45:42CU十二周年纪念徽章
日期:2013-10-24 15:41:34天秤座
日期:2013-10-11 14:55:08子鼠
日期:2013-09-26 19:36:35水瓶座
日期:2013-09-26 17:44:56午马
日期:2013-08-26 10:24:23丑牛
日期:2013-08-19 14:43:22
9 [报告]
发表于 2013-05-13 13:53 |只看该作者
  1. perl -ne 'print "$1:$2\n" while /((?:.\s.)|(?:\S+))\s\[(.+?)\]/g'
复制代码

论坛徽章:
0
10 [报告]
发表于 2013-05-13 22:20 |只看该作者
本帖最后由 meteorcan 于 2013-05-13 22:21 编辑
  1. awk -F "](,|;)" '{for(i=1;i<=NF;i++)print $i}' file|tr -d " "|awk -F "[" 'NF==2{print substr($1,length($1)-1,2)":"$2 }'
复制代码
其中file为你的文件名
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP