免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 810 | 回复: 5

[文本处理] 文件处理shell [复制链接]

论坛徽章:
0
发表于 2017-05-22 09:31 |显示全部楼层

请问各位大神,现有一个如下文件file.txt:
A        3        3        5        6
B        2        6        10        7
C        2        4        5        1
D        2        8        9        6
...
想要每一行的数值都相对第一行的数值怎么实现?
结果应该类似:
A        1        1        1        1
B        2/3        6/3        10/5        7/6
C        2/3        4/3        5/5        1/6
D        2/3        8/3        9/5        6/6
...

谢谢!

论坛徽章:
130
技术图书徽章
日期: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
发表于 2017-05-22 09:57 |显示全部楼层
回复 1# biobaby

$ awk -vOFS="\t" 'function nv(n){return sprintf("%6.2f",$n/a[n])}NR==1{for(n=2;n<=NF;++n){a[n]=$n;$n="  1"};print;next}{for(n=2;n<=NF;++n)$n=nv(n)}1' file.txt
A      1      1      1      1
B      0.67      2.00      2.00      1.17
C      0.67      1.33      1.00      0.17
D      0.67      2.67      1.80      1.00

论坛徽章:
0
发表于 2017-05-22 09:58 |显示全部楼层
回复 2# jason680

谢谢~

论坛徽章:
0
发表于 2017-05-22 16:24 |显示全部楼层
]# awk '{for(i=2;i<=NF;i++){a[$1,i]=$i;b[NR]=$1}}END{for(i=1;i<=NR;i++){printf b[i]" ";for(j=2;j<=NF;j++){if(b[i]=="A"){printf "%8d","1"}else{printf "%8.2f",a[b[i],j]/a["A",j]" "}}print x}}' file
A        1       1       1       1
B     0.67    2.00    2.00    1.17
C     0.67    1.33    1.00    0.17
D     0.67    2.67    1.80    1.00

论坛徽章:
0
发表于 2017-05-22 18:45 |显示全部楼层
这种在excel中点鼠标,最容易。

论坛徽章:
22
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:46
发表于 2017-05-25 17:56 |显示全部楼层
  1. [root@zbxagent01 temp]# awk 'NR==1{printf $1" ";for(i=2;i<=NF;i++){a[i]=$i;printf $i/a[i]" "};printf "\n"}NR!=1{printf $1" ";for(i=2;i<=NF;i++){printf $i"/"a[i]" "};printf "\n"}' a
  2. A 1 1 1 1
  3. B 2/3 6/3 10/5 7/6
  4. C 2/3 4/3 5/5 1/6
  5. D 2/3 8/3 9/5 6/6
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。




----------------------------------------

大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP