Chinaunix

标题: 期待高手出现帮忙解决 [打印本页]

作者: 往事如风2012    时间: 2012-01-31 16:54
标题: 期待高手出现帮忙解决
本帖最后由 往事如风2012 于 2012-02-01 14:17 编辑

a.txt为





b.txt为




如何实现b.txt变为









作者: where27    时间: 2012-01-31 17:32
  1. awk -v RS='\n(start|end)\n' 'NR==FNR{if(NR==2)a="start\n"$0"\nend";next}{if(FNR==2)$0=a;print}' a.txt b.txt
复制代码

作者: yangkyo821    时间: 2012-01-31 17:52
where27 发表于 2012-01-31 17:32

真好,学习了
作者: zooyo    时间: 2012-01-31 19:28
提示: 作者被禁止或删除 内容自动屏蔽
作者: 往事如风2012    时间: 2012-02-01 12:36
非常感谢!不过不具有普遍适用性!
1. 出现NR==2
2. 如果我那个start变为[inf start] end变为[inf end]怎么解决呢?

回复 2# where27


   
作者: hbmhalley    时间: 2012-02-01 13:29
本帖最后由 hbmhalley 于 2012-02-01 15:31 编辑

sed '/^start$/{:n;N;/^end$/!bn;e sed /^start$/,/^end$/!d a.txt
d}' b.txt

sed '/^start$/{:n;n;/^end$/!bn;e sed /^start$/,/^end$/!d a.txt
d}' b.txt
作者: 往事如风2012    时间: 2012-02-01 13:32
可以解决start和end之间有空格么?

回复 6# hbmhalley


   
作者: hbmhalley    时间: 2012-02-01 13:35
回复 7# 往事如风2012


    和空格有关系么?
作者: 往事如风2012    时间: 2012-02-01 13:36
我刚试了试,不行

回复 8# hbmhalley


   
作者: hbmhalley    时间: 2012-02-01 13:39
本帖最后由 hbmhalley 于 2012-02-01 13:41 编辑

回复 9# 往事如风2012


    把数据贴出来啊
    别忘了[code]

    // 必须是gnu sed
作者: 往事如风2012    时间: 2012-02-01 13:46
本帖最后由 往事如风2012 于 2012-02-01 14:04 编辑

烦躁
作者: hbmhalley    时间: 2012-02-01 13:48
回复 11# 往事如风2012


    谁让你把换行扔了的- -||
    还有 你敢不敢别截图直接贴数据 - -||||
作者: 往事如风2012    时间: 2012-02-01 14:19
我重新编辑了一下问题,你看看,急需解决问题!

回复 12# hbmhalley


   
作者: hbmhalley    时间: 2012-02-01 14:28
本帖最后由 hbmhalley 于 2012-02-01 15:20 编辑

回复 13# 往事如风2012
sed '/^\[start a]$/{:n;n;/^\[end b]$/!bn;e sed '\''/^\[start a]$/,/^\[end b]$/!d'\'' a.txt
d}' b.txt
作者: where27    时间: 2012-02-01 15:29
回复 5# 往事如风2012


    NR==2有什么问题?
  1. awk -v RS='\n[^\n]*(start|end)[^\n]*\n' 'NR==FNR{if(NR==2)a=$0;next}{if(FNR==2)$0=a;printf $0""RT}' a.txt b.txt
复制代码
试试这个




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2