免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3062 | 回复: 10

[文本处理] ===完成,感谢===再次求一个脚本,同时取两行的一个字段,插入到特定的其他行 [复制链接]

论坛徽章:
8
双鱼座
日期:2014-07-30 09:28:14辰龙
日期:2014-08-22 14:14:43水瓶座
日期:2014-12-02 15:36:392015年亚洲杯之朝鲜
日期:2015-02-06 09:28:592015亚冠之全北现代
日期:2015-09-10 14:40:18青铜圣斗士
日期:2015-11-18 09:22:56黄金圣斗士
日期:2015-11-26 09:17:2615-16赛季CBA联赛之新疆
日期:2016-08-15 17:00:22
发表于 2016-03-14 14:54 |显示全部楼层
本帖最后由 20032007 于 2016-03-14 15:47 编辑

求个脚本,搞了半天弄不好
我的文本内容是:
  1. aaa1       x24                       
  2. aaa2          x24        
  3. aaa3            x24-aa          23000   
  4. aaa4       aaa           ddd
  5. aaa5       68.1765      10.5000
  6. aaa5       70.1765      16.3527
  7. aaa5       72.1765      19.8233
  8. aaa5       74.1765      24.2247
复制代码
我想处理成:
  1. x24 x24-aa aaa4       aaa           ddd
  2. x24 x24-aa aaa5       68.1765      10.5000
  3. x24 x24-aa aaa5       70.1765      16.3527
  4. x24 x24-aa aaa5       72.1765      19.8233
  5. x24 x24-aa aaa5       74.1765      24.2247
复制代码
或者这样也行:
  1. x24   aaa           ddd         x24-aa
  2. x24   68.1765      10.5000      x24-aa
  3. x24   70.1765      16.3527      x24-aa
  4. x24   72.1765      19.8233      x24-aa
  5. x24   74.1765      24.2247      x24-aa
复制代码
我用
  1. awk '/aaa1/{a=$2};/aaa3/{b=$2}$1=="aaa5"&&$1=a&&$4=b' File
复制代码
结果不对,匹配出来的是:
  1. 1   aaa           ddd         x24-aa
  2. 1   68.1765      10.5000      x24-aa
  3. 1   70.1765      16.3527      x24-aa
  4. 1   72.1765      19.8233      x24-aa
  5. 1   74.1765      24.2247      x24-aa
复制代码
不知道为什么是这个结果,请教高手再点拨一下,感谢。

论坛徽章:
12
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00程序设计版块每日发帖之星
日期:2016-01-19 06:20:0015-16赛季CBA联赛之江苏
日期:2016-01-17 15:31:3915-16赛季CBA联赛之上海
日期:2016-01-16 15:44:3015-16赛季CBA联赛之浙江
日期:2016-01-15 20:38:1815-16赛季CBA联赛之北京
日期:2016-01-09 14:30:15CU十四周年纪念徽章
日期:2016-01-07 12:31:5115-16赛季CBA联赛之四川
日期:2016-01-01 11:49:1515-16赛季CBA联赛之深圳
日期:2015-12-24 14:23:4115-16赛季CBA联赛之山西
日期:2015-12-15 16:22:31技术图书徽章
日期:2015-12-10 17:41:0015-16赛季CBA联赛之北控
日期:2016-02-03 10:03:24
发表于 2016-03-14 15:36 |显示全部楼层
$1=a  ==> ($1=a)
另外不是高手的话最好老老实实写吧,如$1=="aaa5"{$1=a;$4=b;print}
不要投机取巧,不然出错都不知道怎么回事。。

评分

参与人数 1信誉积分 +10 收起 理由
20032007 + 10 非常感谢

查看全部评分

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
发表于 2016-03-14 15:43 |显示全部楼层
回复 1# 20032007
  1. awk '/aaa1/{a=$2;next}/aaa3/{b=$2;next}/aaa[45]/{$0=a FS b FS $0;print}'
复制代码

评分

参与人数 1信誉积分 +10 收起 理由
20032007 + 10 感谢

查看全部评分

论坛徽章:
8
双鱼座
日期:2014-07-30 09:28:14辰龙
日期:2014-08-22 14:14:43水瓶座
日期:2014-12-02 15:36:392015年亚洲杯之朝鲜
日期:2015-02-06 09:28:592015亚冠之全北现代
日期:2015-09-10 14:40:18青铜圣斗士
日期:2015-11-18 09:22:56黄金圣斗士
日期:2015-11-26 09:17:2615-16赛季CBA联赛之新疆
日期:2016-08-15 17:00:22
发表于 2016-03-14 15:46 |显示全部楼层
非常感谢,我没有像取巧,太菜,依样画葫芦,没弄好

再次感谢帮忙解决掉我遇到的问题,也有了一点点长进

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
发表于 2016-03-14 16:23 |显示全部楼层
  1. echo 'aaa1       x24                       
  2. aaa2          x24        
  3. aaa3            x24-aa          23000   
  4. aaa4       aaa           ddd
  5. aaa5       68.1765      10.5000
  6. aaa5       70.1765      16.3527
  7. aaa5       72.1765      19.8233
  8. aaa5       74.1765      24.2247'|sed -nr '/x24/{s/^\S+\s+|\s+.*//g;h;:a;n;/x24-/!ba;s/^\S+\s+|\s.*//g;H;d};G;s/(.*)\n(.*)\n(.*)/\2 \3 \1/p'
  9. x24 x24-aa aaa4       aaa           ddd
  10. x24 x24-aa aaa5       68.1765      10.5000
  11. x24 x24-aa aaa5       70.1765      16.3527
  12. x24 x24-aa aaa5       72.1765      19.8233
  13. x24 x24-aa aaa5       74.1765      24.2247
复制代码

评分

参与人数 1信誉积分 +5 收起 理由
20032007 + 5 谢谢,x24不具有通用性,那个位置上还有很多.

查看全部评分

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
发表于 2016-03-14 17:33 |显示全部楼层
  1. sed -nr '/aaa[13]\s*/{s///;s/\s.*//;H;b};G;s/(.*)\n\n(.*)\n(.*)/\2 \3 \1/p'
复制代码
?

评分

参与人数 1信誉积分 +10 收起 理由
20032007 + 10 非常感谢,又学了一手

查看全部评分

论坛徽章:
8
双鱼座
日期:2014-07-30 09:28:14辰龙
日期:2014-08-22 14:14:43水瓶座
日期:2014-12-02 15:36:392015年亚洲杯之朝鲜
日期:2015-02-06 09:28:592015亚冠之全北现代
日期:2015-09-10 14:40:18青铜圣斗士
日期:2015-11-18 09:22:56黄金圣斗士
日期:2015-11-26 09:17:2615-16赛季CBA联赛之新疆
日期:2016-08-15 17:00:22
发表于 2016-03-14 20:35 |显示全部楼层
moperyblue 发表于 2016-03-14 17:33
?


感谢,又学了一手,请教一下:

sed -nr '/aaa[13]\s*/{s///;s/\s.*//;H;b};G;s/(.*)\n\n(.*)\n(.*)/\2 \3 \1/p'

这里是什么意思呢?

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
发表于 2016-03-14 20:59 |显示全部楼层
回复 7# 20032007


    info sed

`/REGEXP/'
     This will select any line which matches the regular expression
     REGEXP.  If REGEXP itself includes any `/' characters, each must
     be escaped by a backslash (`\').

     The empty regular expression `//' repeats the last regular
     expression match (the same holds if the empty regular expression is
     passed to the `s' command).  Note that modifiers to regular
     expressions are evaluated when the regular expression is compiled,
     thus it is invalid to specify them together with the empty regular
     expression.


s/// 就是 s/aaa[13]\s*//

评分

参与人数 1信誉积分 +5 收起 理由
20032007 + 5 很给力!

查看全部评分

论坛徽章:
8
双鱼座
日期:2014-07-30 09:28:14辰龙
日期:2014-08-22 14:14:43水瓶座
日期:2014-12-02 15:36:392015年亚洲杯之朝鲜
日期:2015-02-06 09:28:592015亚冠之全北现代
日期:2015-09-10 14:40:18青铜圣斗士
日期:2015-11-18 09:22:56黄金圣斗士
日期:2015-11-26 09:17:2615-16赛季CBA联赛之新疆
日期:2016-08-15 17:00:22
发表于 2016-03-14 22:53 |显示全部楼层

moperyblue 发表于 2016-03-14 20:59
回复 7# 20032007


非常感谢!!

论坛徽章:
6
羊年新春福章
日期:2015-03-03 17:16:28双子座
日期:2015-03-03 17:16:56巳蛇
日期:2015-03-03 17:17:2415-16赛季CBA联赛之福建
日期:2016-03-11 09:05:00黑曼巴
日期:2016-07-07 16:58:1215-16赛季CBA联赛之吉林
日期:2016-11-14 09:23:07
发表于 2016-03-15 09:10 |显示全部楼层
  1. awk 'NR==1{a=$2}NR==3{b=$2}NR>3{print a,b,$0}' file
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP