免费注册 查看新帖 |

Chinaunix

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

[文本处理] 可否有一条命令实现下面的操作 [复制链接]

论坛徽章:
6
程序设计版块每日发帖之星
日期:2015-12-05 06:20:00数据库技术版块每日发帖之星
日期:2016-02-06 06:20:00数据库技术版块每日发帖之星
日期:2016-03-07 06:20:00程序设计版块每日发帖之星
日期:2016-06-04 06:20:00黑曼巴
日期:2017-02-06 16:31:2615-16赛季CBA联赛之广夏
日期:2017-05-07 09:02:07
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-01-29 11:26 |只看该作者 |倒序浏览
需要处理一个几百行的数据,要求是最后一行减去第二行,之后对做差的数据进行如下操作,前两列的和除以前三列的和。

待处理的数据如下(选取了一部分):一共7行,3列
345 223  879  221
234 198  342  211
232 222  578  264
980 365  986  112
456 568  898  134
989 878  232  110
789  243 469  547


我使用的方法是用awk读取最后一行,sed提取第二行,之后将两个重定向的文件合并之后再进行做差和相除的运算,不知道这些步骤是否可以只用sed或者awk就能搞定。

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
2 [报告]
发表于 2016-01-29 11:34 |只看该作者
明明是 4 列.... 表示看不懂楼主的描述的举手.

论坛徽章:
6
程序设计版块每日发帖之星
日期:2015-12-05 06:20:00数据库技术版块每日发帖之星
日期:2016-02-06 06:20:00数据库技术版块每日发帖之星
日期:2016-03-07 06:20:00程序设计版块每日发帖之星
日期:2016-06-04 06:20:00黑曼巴
日期:2017-02-06 16:31:2615-16赛季CBA联赛之广夏
日期:2017-05-07 09:02:07
3 [报告]
发表于 2016-01-29 12:08 |只看该作者
回复 2# reyleon


   恩恩四列 说错了, 就是能否通过单一的awk或者sed 实现下面的操作,我是用这两个命令合并处理,感觉有些笨实现要求:1. 将文件中最后一行减去第二行的
               2. 将1步骤处理过的内容做如下操作: 新内容的前两列求和,之后除以前三列求和,得出商

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
4 [报告]
发表于 2016-01-29 12:57 |只看该作者
回复 2# reyleon


   

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
5 [报告]
发表于 2016-01-29 13:15 |只看该作者
回复 3# 夏洛特猫
  1. [root@centos7 tmp]# cat file
  2. 345 223  879  221
  3. 234 198  342  211
  4. 232 222  578  264
  5. 980 365  986  112
  6. 456 568  898  134
  7. 989 878  232  110
  8. 789  243 469  547
  9. [root@centos7 tmp]#
  10. [root@centos7 tmp]#
  11. [root@centos7 tmp]#
  12. [root@centos7 tmp]# awk 'NR==2{split($0,a)}END{for(i=1;i<=NF;i++)$++n=$i-a[i];print}' file
  13. 555 45 127 336
  14. [root@centos7 tmp]# awk 'NR==2{split($0,a)}END{for(i=1;i<=NF;i++)$++n=$i-a[i];NF=n;print ($1+$2)/($1+$2+$3)}' file
  15. 0.825309
  16. [root@centos7 tmp]#
复制代码
是这个意思咩?

评分

参与人数 1信誉积分 +10 收起 理由
Windows19 + 10

查看全部评分

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
6 [报告]
发表于 2016-01-29 13:15 |只看该作者
回复 4# blackold


    黑哥好

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
7 [报告]
发表于 2016-01-29 13:17 |只看该作者
回复 4# blackold


    黑哥好

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
8 [报告]
发表于 2016-01-29 13:50 |只看该作者
回复 6# reyleon
六神好。


   

论坛徽章:
6
程序设计版块每日发帖之星
日期:2015-12-05 06:20:00数据库技术版块每日发帖之星
日期:2016-02-06 06:20:00数据库技术版块每日发帖之星
日期:2016-03-07 06:20:00程序设计版块每日发帖之星
日期:2016-06-04 06:20:00黑曼巴
日期:2017-02-06 16:31:2615-16赛季CBA联赛之广夏
日期:2017-05-07 09:02:07
9 [报告]
发表于 2016-01-29 13:55 |只看该作者
对滴。。。 thanks 6神,我写了awk和sed 的三条命令才完成,您这个就是我想要的。回复 5# reyleon


   

论坛徽章:
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 [报告]
发表于 2016-01-29 14:01 |只看该作者
回复 1# 夏洛特猫


要求是最后一行减去第二行,之后对做差的数据进行如下操作,前两列的和除以前三列的和


$ awk 'function x(){for(n=1;n<=NF;++n)a[n]=$n-a[n]}NR==2{x()}END{x();print (a[1]+a[2])/(a[1]+a[2]+a[3])}' FILE
0.825309

   

评分

参与人数 1信誉积分 +10 收起 理由
Windows19 + 10

查看全部评分

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP