免费注册 查看新帖 |

Chinaunix

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

[文本处理] 处理文本命令优化 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-01-22 11:44 |只看该作者 |倒序浏览
本帖最后由 mafeifan 于 2014-01-22 12:00 编辑

文本内容:baike.txt
  1. <REC>
  2. <ID>=1
  3. <TITLE>=百度百科
  4. <CATEGORY>=百度,百度百科,网络,百科全书,百科词典
  5. <RETITLE>=百度知道;贴吧;百度空间;百度地图;百度新闻搜索;百度图片;百度mp3;百度Hi;百度工具栏;百度影视;百度邮编搜索;百度黄页搜索;百度杀毒;百度语音搜索;科利尔百科全书;苏联大百科全书;汇吃百科;维基百科;百度视频;百度蜘蛛;百度文库;互动百科;百度文档;百度文化共享搜索;百度盲道;百度会员;百度搜藏;百度TV;百科全书;知识掌门人;百度游戏;百度有啊;张震;科友;
  6. <URL>=http://baike.baidu.com/view/1.htm

  7. <REC>
  8. <ID>=2
  9. <TITLE>=词条
  10. <CATEGORY>=百度,百度百科
  11. <RETITLE>=相关词条;
  12. <URL>=http://baike.baidu.com/view/2.htm

  13. <REC>
  14. <ID>=3
  15. <TITLE>=编辑实验
  16. <CATEGORY>=百度,百度百科,帮助,词条,编辑
  17. <RETITLE>=词条;百度;
  18. <URL>=http://baike.baidu.com/view/3.htm

  19. <REC>
  20. <ID>=4
  21. <TITLE>=馒头
  22. <CATEGORY>=食品,饮食,面食,食谱,蒸馍
  23. <RETITLE>=大饼;油条;面包;饺子;花卷;包子;麻花;食品;主食;糯米饭;蛋糕;鲜肉包;米粥;面条;凉拌菜;年糕;饼干;窝头;粽子;烤饼;酥饼;汤圆;烧饼;
  24. <URL>=http://baike.baidu.com/view/4.htm
复制代码
要求保留包含ID 、 Title 、 Category的行,并且显示在一行
结果类似

  1. 1@百度百科@百度,百度百科,网络,百科全书,百科词典
  2. 2@词条@百度,百度百科
  3. 3@编辑实验@百度,百度百科,帮助,词条,编辑
  4. 4@馒头@食品,饮食,面食,食谱,蒸馍
  5. 5@雁荡山@地理,旅游,旅游景点,自然景观,地质公园
复制代码
我的做法
先提取再合并
  1. grep '<TITLE>=' baike.txt | tr -d "<TITLE>=" > title.txt
  2. grep '<CATEGORY>=' baike.txt | tr -d "<CATEGORY>=" > category.txt
  3. paste -d@ title.txt  category.txt > finish.txt
复制代码
现在问题命令中有很多重复的内容 如title category 想用变量代替
比如把<TITLE>=,<CATEGORY>=放到一个数组中,用循环
写成个sh
请问怎么优化

论坛徽章:
0
2 [报告]
发表于 2014-01-22 12:06 |只看该作者
  1. awk -vRS="<REC>" -F "[\n=]+" -vOFS="@" 'NR>1{print $3,$5"\n"OFS$7}'
复制代码

论坛徽章:
0
3 [报告]
发表于 2014-01-22 12:24 |只看该作者
回复 2# wang390750


    看不懂 能否解释一下 怎么传入 baike.txt

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
4 [报告]
发表于 2014-01-22 12:33 |只看该作者
  1. # awk -F= '/<TITLE>/{t="@"$NF}/<CATEGORY>/{print ++i t"@"$NF}' i
  2. 1@百度百科@百度,百度百科,网络,百科全书,百科词典
  3. 2@词条@百度,百度百科
  4. 3@编辑实验@百度,百度百科,帮助,词条,编辑
  5. 4@馒头@食品,饮食,面食,食谱,蒸馍
  6. cat i
  7. <REC>
  8. <ID>=1
  9. <TITLE>=百度百科
  10. <CATEGORY>=百度,百度百科,网络,百科全书,百科词典
  11. <RETITLE>=百度知道;贴吧;百度空间;百度地图;百度新闻搜索;百度图片;百度mp3;百度Hi;百度工具栏;百度影视;百度邮编搜索;百度黄页搜索;百度杀毒;百度语音搜索;科利尔百科全书;苏联大百科全书;汇吃百科;维基百科;百度视频;百度蜘蛛;百度文库;互动百科;百度文档;百度文化共享搜索;百度盲道;百度会员;百度搜藏;百度TV;百科全书;知识掌门人;百度游戏;百度有啊;张震;科友;
  12. <URL>=http://baike.baidu.com/view/1.htm

  13. <REC>
  14. <ID>=2
  15. <TITLE>=词条
  16. <CATEGORY>=百度,百度百科
  17. <RETITLE>=相关词条;
  18. <URL>=http://baike.baidu.com/view/2.htm

  19. <REC>
  20. <ID>=3
  21. <TITLE>=编辑实验
  22. <CATEGORY>=百度,百度百科,帮助,词条,编辑
  23. <RETITLE>=词条;百度;
  24. <URL>=http://baike.baidu.com/view/3.htm

  25. <REC>
  26. <ID>=4
  27. <TITLE>=馒头
  28. <CATEGORY>=食品,饮食,面食,食谱,蒸馍
  29. <RETITLE>=大饼;油条;面包;饺子;花卷;包子;麻花;食品;主食;糯米饭;蛋糕;鲜肉包;米粥;面条;凉拌菜;年糕;饼干;窝头;粽子;烤饼;酥饼;汤圆;烧饼;
  30. <URL>=http://baike.baidu.com/view/4.htm
  31. [root@xinfuka ~]#
复制代码

论坛徽章:
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 [报告]
发表于 2014-01-22 12:34 |只看该作者
  1. awk -F '[=\n]+' -vRS='<REC>' -vOFS='@' 'NR>1{print $3,$5,$7}' baike.txt
复制代码

论坛徽章:
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
6 [报告]
发表于 2014-01-22 13:24 |只看该作者
  1. awk -F"=" '$1~/<REC>/{s="";k=0}$1~/<ID>|<TITLE>|<CATEGORY>/{s=s?s"@"$2:$2;k++;if(k==3){print s}}' o
复制代码

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
7 [报告]
发表于 2014-01-22 14:18 |只看该作者
回复 1# mafeifan

$ awk -F= -vOFS="@" '/<ID>/{id=$2}/<TITLE>/{ti=$2}/<CATEGORY>/{print id,ti,$2;id=ti=""}' baike.txt
1@百度百科@百度,百度百科,网络,百科全书,百科词典
2@词条@百度,百度百科
3@编辑实验@百度,百度百科,帮助,词条,编辑
4@馒头@食品,饮食,面食,食谱,蒸馍

   

论坛徽章:
0
8 [报告]
发表于 2014-01-22 14:23 |只看该作者
谢谢 awk确实很强大 学习了

论坛徽章:
0
9 [报告]
发表于 2014-01-22 14:31 |只看该作者
回复 7# jason680

怎么每个ID占一行,结果是:
  1. 1
  2. @百度百科
  3. @百度,百度百科,网络,百科全书,百科词典

  4. 2
  5. @词条
  6. @百度,百度百科

  7. 3
  8. @编辑实验
  9. @百度,百度百科,帮助,词条,编辑

  10. 4
  11. @馒头
  12. @食品,饮食,面食,食谱,蒸馍

  13. 6
  14. @雁荡山
  15. @地理,旅游,旅游景点,自然景观,地质公园

  16. 7
  17. @灵峰
  18. @风景,雁荡山,地理,旅游,温州

  19. 8
  20. @大龙湫
  21. @雁荡山,地理,文言文,风景旅游,中国浙江

  22. 9
  23. @五大夫松
  24. @风景,旅游,历史,国宝,古树名木

  25. 10
  26. @红色食品
  27. @食疗,健康,食品,科学,饮食

  28. 11
  29. @饴糖
  30. @食品,中药,烹饪,糖类,农产品
复制代码

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
10 [报告]
发表于 2014-01-22 14:44 |只看该作者
回复 9# mafeifan

1. change OFS
$ awk -F= -vOFS="\n@" '/<ID>/{id=$2}/<TITLE>/{ti=$2}/<CATEGORY>/{print id,ti,$2"\n";id=ti=""}' baike.txt

2. print it directly
$ awk -F= '/<ID>/{print $2}/<TITLE>/{print "@"$2}/<CATEGORY>/{print "@"$2"\n"}' baike.txt

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP