免费注册 查看新帖 |

Chinaunix

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

[文本处理] 请教unix环境下如何将A文件中部分内容替换B文件中的相同部分 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2015-04-26 14:23 |只看该作者
本帖最后由 encguwe 于 2015-04-26 14:25 编辑

谢谢,可是这个-r参数在这里好像有问题

eric@ahmas1o> sed -r '/<measInfo measInfoId/{:a;N;/\n<measInfo measInfoId/;s#^.*$#sed -n '/measInfo/,/measInfo/p' a.txt#e}' b.txt
sed: illegal option -- r

论坛徽章:
20
卯兔
日期:2015-01-26 22:05:142015亚冠之萨济拖拉机
日期:2015-09-10 15:15:282015亚冠之阿尔希拉尔
日期:2015-09-25 17:37:53程序设计版块每日发帖之星
日期:2015-10-03 06:20:00程序设计版块每日发帖之星
日期:2015-12-09 06:20:00CU十四周年纪念徽章
日期:2015-12-17 09:07:15程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:342015亚冠之广州富力
日期:2015-08-27 19:29:56每日论坛发贴之星
日期:2015-08-26 06:20:002015亚冠之阿尔希拉尔
日期:2015-05-18 17:26:27
12 [报告]
发表于 2015-04-26 15:00 |只看该作者
回复 4# encguwe
  1. $s="BSSGP,bssgp"
  2. $e="BSSGP,bssgp_non_indexed"
  3. $awk -vs=$s -ve=$e -vp=1 '$0~s,$0~e{if(FNR==NR){y=$0~e?y$0:y$0"\n"}else{p=0}}FNR==NR{next}$0~e{p=1;print y;next}p' a.txt b.txt
  4. <r p="1">35328842</r>
  5. <r p="2">0</r>
  6. <r p="3">18446744081936071082</r>
  7. <measInfo measInfoId="BSSGP,bssgp">
  8. <r p="1">0</r>
  9. <r p="2">0</r>
  10. <r p="3">0</r>
  11. <r p="4">0</r>
  12. <r p="5">0</r>
  13. <r p="6">0</r>
  14. <r p="7">0</r>
  15. <measInfo measInfoId="BSSGP,bssgp_non_indexed">
  16. <r p="1">172328</r>
  17. <r p="2">475498</r>
复制代码
试试看

论坛徽章:
0
13 [报告]
发表于 2015-04-26 15:04 |只看该作者
本帖最后由 encguwe 于 2015-04-26 15:04 编辑

回复 12# songyc_2015


    是不是环境不同,我是solaris Unix 的

eric@ahmas1o> awk -vs=$s -ve=$e -vp=1 '$0~s,$0~e{if(FNR==NR){y=$0~e?y$0:y$0"\n"}else{p=0}}FNR==NR{next}$0~e{p=1;print y;next}p' a.txt b.txt
s: Undefined variable.

论坛徽章:
20
卯兔
日期:2015-01-26 22:05:142015亚冠之萨济拖拉机
日期:2015-09-10 15:15:282015亚冠之阿尔希拉尔
日期:2015-09-25 17:37:53程序设计版块每日发帖之星
日期:2015-10-03 06:20:00程序设计版块每日发帖之星
日期:2015-12-09 06:20:00CU十四周年纪念徽章
日期:2015-12-17 09:07:15程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:342015亚冠之广州富力
日期:2015-08-27 19:29:56每日论坛发贴之星
日期:2015-08-26 06:20:002015亚冠之阿尔希拉尔
日期:2015-05-18 17:26:27
14 [报告]
发表于 2015-04-26 15:10 |只看该作者
回复 13# encguwe
  1. uname -a
  2. Linux localhost.localdomain 2.6.32-71.el6.i686 #1 SMP Wed Sep 1 01:26:34 EDT 2010 i686 i686 i386 GNU/Linux
复制代码
可能是吧,solaris我没用过,我测试环境是红帽子linux,但这是awk比较基本传参写法,应该支持吧,只好坐等大神了。。。

论坛徽章:
1
2015亚冠之鹿岛鹿角
日期:2015-05-12 13:04:44
15 [报告]
发表于 2015-04-26 15:19 |只看该作者
回复 3# encguwe
用nawk试试;或者用绝对路径执行.


   

论坛徽章:
0
16 [报告]
发表于 2015-04-26 15:42 |只看该作者
回复 15# A_Traveler


    用了nawk,貌似语法对了,但是生成的文件没有换行,如何解决呢?

eric@ahmas1o> nawk -vRS='<[^>]+BSSGP[^<]+>' 'NR==2{t=$0}NR>FNR{FNR==2?$0=t:1;printf $0""RT}' a1.txt b1.txt > c1.txt
eric@ahmas1o> cat c1.txt
<r p="1">35328842</r><r p="2">0</r><r p="3">18446744081936071082</r><measInfo measInfoId="BSSGP,bssgp"><r p="1">35328842</r><r p="2">0</r><r p="3">18446744081936071082</r><measInfo measInfoId="BSSGP,bssgp_non_indexed"><r p="1">172328</r><r p="2">475498</r> eric@ah

论坛徽章:
0
17 [报告]
发表于 2015-04-26 15:50 |只看该作者
回复 7# 我是一隻羊


     用了nawk语法对了,但是结果没有换行,而且貌似也没有换过来

eric@ahmas1o> nawk -vRS='<[^>]+BSSGP[^<]+>' 'NR==2{t=$0}NR>FNR{FNR==2?$0=t:1;printf $0""RT}' a1.txt b1.txt > c1.txt
eric@ahmas1o> cat a1.txt
<r p="1">0</r>
<r p="2">0</r>
<r p="3">0</r>
<r p="4">0</r>
<r p="5">0</r>
<measInfo measInfoId="BSSGP,bssgp">
<r p="1">0</r>
<r p="2">0</r>
<r p="3">0</r>
<r p="4">0</r>
<r p="5">0</r>
<r p="6">0</r>
<r p="7">0</r>
<measInfo measInfoId="BSSGP,bssgp_non_indexed">
<r p="1">172328</r>
<r p="2">475498</r>

eric@ahmas1o> cat b1.txt
<r p="1">35328842</r>
<r p="2">0</r>
<r p="3">18446744081936071082</r>
<measInfo measInfoId="BSSGP,bssgp">
<r p="1">35328842</r>
<r p="2">0</r>
<r p="3">18446744081936071082</r>
<measInfo measInfoId="BSSGP,bssgp_non_indexed">
<r p="1">172328</r>
<r p="2">475498</r>

eric@ahmas1o> cat c1.txt
<r p="1">35328842</r><r p="2">0</r><r p="3">18446744081936071082</r><measInfo measInfoId="BSSGP,bssgp"><r p="1">35328842</r><r p="2">0</r><r p="3">18446744081936071082</r><measInfo measInfoId="BSSGP,bssgp_non_indexed"><r p="1">172328</r><r p="2">475498</r> eric@ahmas1o>

论坛徽章:
0
18 [报告]
发表于 2015-04-26 16:13 |只看该作者
回复 7# 我是一隻羊


    用了nawk语法对了,但是结果没有换行,而且貌似也没有换过来

eric@ahmas1o> nawk -vRS='<[^>]+BSSGP[^<]+>' 'NR==2{t=$0}NR>FNR{FNR==2?$0=t:1;printf $0""RT}' a1.txt b1.txt > c1.txt
eric@ahmas1o> cat a1.txt
<r p="1">0</r>
<r p="2">0</r>
<r p="3">0</r>
<r p="4">0</r>
<r p="5">0</r>
<measInfo measInfoId="BSSGP,bssgp">
<r p="1">0</r>
<r p="2">0</r>
<r p="3">0</r>
<r p="4">0</r>
<r p="5">0</r>
<r p="6">0</r>
<r p="7">0</r>
<measInfo measInfoId="BSSGP,bssgp_non_indexed">
<r p="1">172328</r>
<r p="2">475498</r>

eric@ahmas1o> cat b1.txt
<r p="1">35328842</r>
<r p="2">0</r>
<r p="3">18446744081936071082</r>
<measInfo measInfoId="BSSGP,bssgp">
<r p="1">35328842</r>
<r p="2">0</r>
<r p="3">18446744081936071082</r>
<measInfo measInfoId="BSSGP,bssgp_non_indexed">
<r p="1">172328</r>
<r p="2">475498</r>

eric@ahmas1o> cat c1.txt
<r p="1">35328842</r><r p="2">0</r><r p="3">18446744081936071082</r><measInfo measInfoId="BSSGP,bssgp"><r p="1">35328842</r><r p="2">0</r><r p="3">18446744081936071082</r><measInfo measInfoId="BSSGP,bssgp_non_indexed"><r p="1">172328</r><r p="2">475498</r> eric@ahmas1o>
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP