免费注册 查看新帖 |

Chinaunix

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

[文本处理] ~~求助~含有相同字符的相邻两行处理~ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-26 10:45 |只看该作者 |倒序浏览
本帖最后由 illiteracyzx 于 2014-02-26 10:47 编辑

fileA如下
02/24 15:33:46:IN <30.805.article.106IP172.17.52.22>: CONN TEC: 13782522
phone: 168630142
02/24 15:33:53:IN <26.466.article.107IP172.17.52.22>: CONN TEC: 1376181
phone: 168630231
02/24 15:33:54:IN <21.749.article.108IP172.17.52.22>: CONN TEC: 1648421
02/24 15:33:54:IN <12.435.article.108IP172.17.52.22>: CONN TEC: 34994554
phone: 168615511
phone: 168631692

02/24 15:34:00:IN <25.148.article.105IP172.17.52.22>: CONN TEC: 20263842
phone: 168630245
02/24 15:34:01:IN <14.794.article.108IP172.17.52.22>: CONN TEC: 55626086
phone: 168632163

希望将相邻两行都含有 CONN TEC的后者与其下一行互换。
这样就可以拥有同一格式

....
*****CONN TEC****
phone***
*****CONN TEC****
phone***
*****CONN TEC****
phone***
*****CONN TEC****
phone***
.....


即希望输出如下:

02/24 15:33:46:IN <30.805.article.106IP172.17.52.22>: CONN TEC: 13782522
phone: 168630142
02/24 15:33:53:IN <26.466.article.107IP172.17.52.22>: CONN TEC: 1376181
phone: 168630231
02/24 15:33:54:IN <21.749.article.108IP172.17.52.22>: CONN TEC: 1648421
phone: 168615511
02/24 15:33:54:IN <12.435.article.108IP172.17.52.22>: CONN TEC: 34994554
phone: 168631692

02/24 15:34:00:IN <25.148.article.105IP172.17.52.22>: CONN TEC: 20263842
phone: 168630245
02/24 15:34:01:IN <14.794.article.108IP172.17.52.22>: CONN TEC: 55626086
phone: 168632163

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
2 [报告]
发表于 2014-02-26 10:47 |只看该作者
回复 1# illiteracyzx

要考虑处理连续的3行或以上 CONN TEC:吗?


   

论坛徽章:
0
3 [报告]
发表于 2014-02-26 10:49 |只看该作者
回复 2# Herowinter
应该不用考虑~几率很小

   

论坛徽章:
0
4 [报告]
发表于 2014-02-26 10:55 |只看该作者
回复 1# illiteracyzx

Try this:
  1. sed '/CONN/{N;/\n.*CONN/{N;s/\n\(.*\)\n\(.*\)$/\n\2\n\1/}}'
复制代码

论坛徽章:
0
5 [报告]
发表于 2014-02-26 10:57 |只看该作者
回复 4# runintostar

多谢,方便简单讲解下吗?
   

论坛徽章:
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
6 [报告]
发表于 2014-02-26 11:00 |只看该作者
回复 1# illiteracyzx

# awk '{if($0~/^phone:/)print a[++p]"\n"$0;else a[++c]=$0}' A
02/24 15:33:46:IN <30.805.article.106IP172.17.52.22>: CONN TEC: 13782522
phone: 168630142
02/24 15:33:53:IN <26.466.article.107IP172.17.52.22>: CONN TEC: 1376181
phone: 168630231
02/24 15:33:54:IN <21.749.article.108IP172.17.52.22>: CONN TEC: 1648421
phone: 168615511
02/24 15:33:54:IN <12.435.article.108IP172.17.52.22>: CONN TEC: 34994554
phone: 168631692
02/24 15:34:00:IN <25.148.article.105IP172.17.52.22>: CONN TEC: 20263842
phone: 168630245
02/24 15:34:01:IN <14.794.article.108IP172.17.52.22>: CONN TEC: 55626086
phone: 168632163

   

论坛徽章:
0
7 [报告]
发表于 2014-02-26 11:04 |只看该作者
回复 6# jason680
亲,方便给点提示吗

   

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
8 [报告]
发表于 2014-02-26 11:23 |只看该作者
  1. [root@syh test]# awk '/CONN TEC/{a[++i]=$0}/phone/{b[++k]=$0}END{for(j=1;j<=i;j+                                                                                        +){print a[j];print b[j]}}' a
  2. i02/24 15:33:46:IN <30.805.article.106IP172.17.52.22>: CONN TEC: 13782522
  3. phone: 168630142
  4. 02/24 15:33:53:IN <26.466.article.107IP172.17.52.22>: CONN TEC: 1376181
  5. phone: 168630231
  6. 02/24 15:33:54:IN <21.749.article.108IP172.17.52.22>: CONN TEC: 1648421
  7. phone: 168615511
  8. 02/24 15:33:54:IN <12.435.article.108IP172.17.52.22>: CONN TEC: 34994554
  9. phone: 168631692
  10. 02/24 15:34:00:IN <25.148.article.105IP172.17.52.22>: CONN TEC: 20263842
  11. phone: 168630245
  12. 02/24 15:34:01:IN <14.794.article.108IP172.17.52.22>: CONN TEC: 55626086
  13. phone: 168632163
  14. [root@syh test]# cat a
  15. i02/24 15:33:46:IN <30.805.article.106IP172.17.52.22>: CONN TEC: 13782522
  16. phone: 168630142
  17. 02/24 15:33:53:IN <26.466.article.107IP172.17.52.22>: CONN TEC: 1376181
  18. phone: 168630231
  19. 02/24 15:33:54:IN <21.749.article.108IP172.17.52.22>: CONN TEC: 1648421
  20. 02/24 15:33:54:IN <12.435.article.108IP172.17.52.22>: CONN TEC: 34994554
  21. phone: 168615511
  22. phone: 168631692
  23. 02/24 15:34:00:IN <25.148.article.105IP172.17.52.22>: CONN TEC: 20263842
  24. phone: 168630245
  25. 02/24 15:34:01:IN <14.794.article.108IP172.17.52.22>: CONN TEC: 55626086
  26. phone: 168632163
  27. [root@syh test]#
复制代码

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
9 [报告]
发表于 2014-02-26 11:23 |只看该作者
回复 1# illiteracyzx
也可以处理连续的3行的。
  1. awk '/CONN TEC/{a[++i]=$0} /phone/{b[++j]=$0} i==j{for(k=1;k<=i;k++){print a[k];print b[k]};i=j=0}' A

复制代码

论坛徽章:
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-02-26 11:40 |只看该作者
本帖最后由 jason680 于 2014-02-26 11:41 编辑

回复 7# illiteracyzx

awk '{if($0~/^phone:/)print a[++p]"\n"$0;else a[++c]=$0}' A


*****CONN TEC****   ==> push data to a[1] by a[++c]=$0
phone***                    ==> match phone: and get a[1] and himself by print a[++p]"\n"$0
*****CONN TEC****  ==> push data to a[2] by a[++c]=$0
*****CONN TEC**** ==> push data to a[3] by a[++c]=$0
phone***                  ==> match phone: and get a[2] and himself by print a[++p]"\n"$0
phone***                  ==> match phone: and get a[3] and himself by print a[++p]"\n"$0
...

and you will get result what you want   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP