免费注册 查看新帖 |

Chinaunix

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

[文本处理] 多个文件对应的列相加 [复制链接]

论坛徽章:
0
发表于 2015-08-21 09:39 |显示全部楼层
本帖最后由 mazuju099 于 2015-08-21 09:41 编辑

有许多个文件名为DOS1, DOS2, DOS3,,,,,,,,,DOS999,

它们的格式为:一共七列,所有文件第一列相同,其它列都不同
  1. -24.60450000   0.04650000  -0.04650000   0.00230100  -0.00230100   0.00000000  -0.00000000
  2. -24.58550000   0.03427000  -0.03427000   0.00171000  -0.00171000   0.00000000  -0.00000000
  3. -24.56550000   0.02450000  -0.02450000   0.00123200  -0.00123200   0.00000000  -0.00000000
  4. -24.54550000   0.01698000  -0.01698000   0.00086040  -0.00086050   0.00000000  -0.00000000
  5. -24.52650000   0.01142000  -0.01142000   0.00058240  -0.00058240   0.00000000  -0.00000000
  6. -24.50650000   0.00744300  -0.00744300   0.00038210  -0.00038210   0.00000000  -0.00000000
  7. -24.48750000   0.00470400  -0.00470500   0.00024290  -0.00024290   0.00000000  -0.00000000
  8. -24.46750000   0.00288300  -0.00288300   0.00014970  -0.00014970   0.00000000  -0.00000000
  9. -24.44750000   0.00171300  -0.00171300   0.00008941  -0.00008941   0.00000000  -0.00000000
  10. -24.42850000   0.00098780  -0.00098790   0.00005186  -0.00005187   0.00000000  -0.00000000
  11. -24.40850000   0.00055470  -0.00055470   0.00002940  -0.00002940   0.00000000  -0.00000000
  12. -24.38950000   0.00030730  -0.00030740   0.00001671  -0.00001671   0.00000000  -0.00000000
  13. -24.36950000   0.00017650  -0.00017650   0.00001035  -0.00001035   0.00000000  -0.00000000
  14. -24.34950000   0.00012070  -0.00012070   0.00000845  -0.00000845   0.00000000  -0.00000000
  15. -24.33050000   0.00012020  -0.00012020   0.00001039  -0.00001039   0.00000000  -0.00000000
  16. -24.31050000   0.00017230  -0.00017230   0.00001679  -0.00001679   0.00000000  -0.00000000
  17. -24.29150000   0.00029000  -0.00029000   0.00002953  -0.00002953   0.00000000  -0.00000000
  18. -24.27150000   0.00050300  -0.00050290   0.00005205  -0.00005205   0.00000000  -0.00000000
  19. -24.25150000   0.00085930  -0.00085930   0.00008976  -0.00008975   0.00000000  -0.00000000
  20. -24.23250000   0.00143000  -0.00143000   0.00015050  -0.00015050   0.00000000  -0.00000000
  21. -24.21250000   0.00230900  -0.00230900   0.00024530  -0.00024520   0.00000000  -0.00000000
  22. -24.19350000   0.00362300  -0.00362300   0.00038840  -0.00038840   0.00000000  -0.00000000
  23. -24.17350000   0.00552200  -0.00552200   0.00059820  -0.00059820   0.00000000  -0.00000000
  24. -24.15350000   0.00818400  -0.00818400   0.00089710  -0.00089700   0.00000000  -0.00000000
  25. -24.13450000   0.01181000  -0.01181000   0.00131100  -0.00131100   0.00000000  -0.00000000
  26. -24.11450000   0.01660000  -0.01660000   0.00186800  -0.00186800   0.00000000  -0.00000000
  27. -24.09550000   0.02277000  -0.02277000   0.00260100  -0.00260000   0.00000000  -0.00000000
  28. -24.07550000   0.03051000  -0.03051000   0.00353800  -0.00353800   0.00000000  -0.00000000
复制代码
现在如何生成一个新文件DOS-sum,这个新文件的第一列为DOS1的第一列,第二列为所有文件第二列相加,第三列为所有文件第三列相加,,,第七列为所有文件第七列相加.

论坛徽章:
7
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:18程序设计版块每日发帖之星
日期:2015-08-09 06:20:00每日论坛发贴之星
日期:2015-08-09 06:20:00程序设计版块每日发帖之星
日期:2015-08-22 06:20:00程序设计版块每日发帖之星
日期:2015-08-27 06:20:00
发表于 2015-08-21 10:08 |显示全部楼层
  1. [jay.liu@aliCloud chinaUnix]$ head *txt
  2. ==> 1.txt <==
  3. a 1
  4. b 1

  5. ==> 2.txt <==
  6. a 2
  7. b 2

  8. ==> 3.txt <==
  9. a 3
  10. b 3
  11. [jay.liu@aliCloud chinaUnix]$ awk '{a[$1]+=$2}END{for(i in a) print i,a[i]}' *txt
  12. a 6
  13. b 6
复制代码

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
发表于 2015-08-21 10:10 |显示全部楼层
  1. awk '{a[1,FNR]=$1;for(i=2;i<=NF;i++)a[i,FNR]+=$i}
  2. END{for(j=1;j<=FNR;j++)
  3. for(i=1;i<=NF;i++)printf " "a[i,j]
  4. print ""}' DOS*
复制代码

论坛徽章:
0
发表于 2015-08-21 10:29 |显示全部楼层
回复 3# waker


    谢谢大侠,可是这样得到的结果很乱呢,能不能使得到的文件能够排列整齐一点。就像给的DOS1文件那样整齐排列

论坛徽章:
9
2015亚冠之大阪钢巴
日期:2015-06-04 11:47:30丑牛
日期:2015-01-22 15:49:26巳蛇
日期:2015-01-22 10:11:18巨蟹座
日期:2014-11-20 10:55:03天蝎座
日期:2014-11-16 22:10:26处女座
日期:2014-11-16 11:01:10申猴
日期:2014-09-19 11:12:37双鱼座
日期:2014-07-25 10:09:54程序设计版块每日发帖之星
日期:2015-08-24 06:20:00
发表于 2015-08-21 11:01 |显示全部楼层
  1. awk '{x[$1];for(i=2;i<=NF;i++){a[$1,i]+=$i}}END{for(i in x){printf i" ";for(b=2;b<=NF;b++) printf a[i,b]" ";print ""}}' dos*
复制代码

论坛徽章:
0
发表于 2015-08-21 11:05 |显示全部楼层
Buring__ 发表于 2015-08-21 11:01


采用这个代码,得到的结果好像不对呢

论坛徽章:
9
2015亚冠之大阪钢巴
日期:2015-06-04 11:47:30丑牛
日期:2015-01-22 15:49:26巳蛇
日期:2015-01-22 10:11:18巨蟹座
日期:2014-11-20 10:55:03天蝎座
日期:2014-11-16 22:10:26处女座
日期:2014-11-16 11:01:10申猴
日期:2014-09-19 11:12:37双鱼座
日期:2014-07-25 10:09:54程序设计版块每日发帖之星
日期:2015-08-24 06:20:00
发表于 2015-08-21 11:18 |显示全部楼层
     你好好对比一下, 我看着和帽子哥的结果是一样的

论坛徽章:
0
发表于 2015-08-21 11:33 |显示全部楼层
本帖最后由 mazuju099 于 2015-08-21 11:35 编辑

回复 7# Buring__


    不知道是不是我的文本特殊,我得到的结果是这样的:最后结果中每一行的顺序是乱的,例如本该在第一行的跑到了第三行。

[wukc3@console1 dos-2]$ cat 1
-26.38850000   0.05255000  -0.05255000   0.00349300  -0.00349300   0.00000000  -0.00000000
-26.36850000   0.05910000  -0.05910000   0.00412600  -0.00412600   0.00000000  -0.00000000
-26.34850000   0.06480000  -0.06480000   0.00473500  -0.00473500   0.00000000  -0.00000000
[wukc3@console1 dos-2]$ cat 2
-26.38850000   0.06312000  -0.06312000   0.00442800  -0.00442700   0.00000000  -0.00000000
-26.36850000   0.06838000  -0.06838000   0.00503600  -0.00503600   0.00000000  -0.00000000
-26.34850000   0.07223000  -0.07223000   0.00556600  -0.00556600   0.00000000  -0.00000000
[wukc3@console1 dos-2]$ awk '{x[$1];for(i=2;i<=NF;i++){a[$1,i]+=$i}}END{for(i in x){printf i" ";for(b=2;b<=NF;b++) printf a[i,b]" ";print ""}}' 1 2
-26.36850000 0.12748 -0.12748 0.009162 -0.009162 0 0
-26.34850000 0.13703 -0.13703 0.010301 -0.010301 0 0
-26.38850000 0.11567 -0.11567 0.007921 -0.00792 0 0

论坛徽章:
9
2015亚冠之大阪钢巴
日期:2015-06-04 11:47:30丑牛
日期:2015-01-22 15:49:26巳蛇
日期:2015-01-22 10:11:18巨蟹座
日期:2014-11-20 10:55:03天蝎座
日期:2014-11-16 22:10:26处女座
日期:2014-11-16 11:01:10申猴
日期:2014-09-19 11:12:37双鱼座
日期:2014-07-25 10:09:54程序设计版块每日发帖之星
日期:2015-08-24 06:20:00
发表于 2015-08-21 11:49 |显示全部楼层
回复 8# mazuju099

要顺序的话,这样试试
  1. awk '{x[FNR]=$1;for(i=2;i<=NF;i++){a[$1,i]+=$i}}END{for(i=1;i<=FNR;i++){printf x[i]" ";for(b=2;b<=NF;b++) printf a[x[i],b]" ";print ""}}' dos*
复制代码

论坛徽章:
7
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:18程序设计版块每日发帖之星
日期:2015-08-09 06:20:00每日论坛发贴之星
日期:2015-08-09 06:20:00程序设计版块每日发帖之星
日期:2015-08-22 06:20:00程序设计版块每日发帖之星
日期:2015-08-27 06:20:00
发表于 2015-08-21 12:10 |显示全部楼层
  1. awk '{for(i=2;i<=NF;i++) a[$1][i]+=$i}END{for(i in a){printf i"\t"; {for (m=2;m<=NF;m++) {printf("%.08f\t", a[i][m])};print""}}}' *.txt
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP