免费注册 查看新帖 |

Chinaunix

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

档案合并加总问题 ? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-17 15:11 |只看该作者 |倒序浏览
我有两各档案内容如下:

file 1.txt
00:00,0003,0000453
00:05,0006,0000681
00:10,0006,0000580
00:15,0005,0000497
00:20,0008,0000595
00:25,0003,0000461
00:30,0004,0000396
00:35,0007,0000507
00:40,0009,0000521

file 2.txt
00:00,0005,0000542
00:05,0007,0000493
00:10,0005,0000222
00:15,0004,0000227
00:20,0006,0000420
00:25,0004,0000398
00:30,0002,0000250
00:35,0003,0000279
00:40,0005,0000373

需要把$2加总,$3加总后/2 产生file 3.txt该如何写呢?

论坛徽章:
0
2 [报告]
发表于 2006-11-17 15:44 |只看该作者

example

awk -F "," '{sum2+=$2;sum3+=$3}END{print sum2,sum3/2}' 1.txt 2.txt >3.txt

论坛徽章:
0
3 [报告]
发表于 2006-11-17 15:47 |只看该作者
原帖由 随风漂 于 2006-11-17 15:44 发表
awk -F "," '{sum2+=$2;sum3+=$3}END{print sum2,sum3/2}' 1.txt 2.txt >3.txt


哎,被抢了先

论坛徽章:
0
4 [报告]
发表于 2006-11-17 15:59 |只看该作者
原帖由 随风漂 于 2006-11-17 15:44 发表
awk -F "," '{sum2+=$2;sum3+=$3}END{print sum2,sum3/2}' 1.txt 2.txt >3.txt



File 3.txt 的内容也要是 file 1.txt的format一样只是把$2,$3做计算,
$1时间的栏位不动,不是要纯粹计算出答案,请问有方法吗?

计算后File 3.txt内容:
00:00,0008,000497
00:05,0013,000587
00:10,0011,000401
00:15,0009,000362
00:20,0014,000507
00:25,0007,000429
00:30,0006,000323
00:35,0010,000393
00:40,0014,000447

[ 本帖最后由 lucas528 于 2006-11-17 18:32 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2006-11-19 21:11 |只看该作者
PUSH ~

论坛徽章:
0
6 [报告]
发表于 2006-11-19 21:26 |只看该作者

  1. #!/bin/awk -f
  2. BEGIN {
  3.     FS = ","
  4. }
  5. FILENAME == "1.txt" {
  6.     hash[$1] = $0
  7. }
  8. FILENAME == "2.txt" {
  9.     if ($1 in hash)
  10.     {
  11.         split(hash[$1], tmp);
  12.         printf("%s,%.4d,%.7d\n", $1, $2 + tmp[2], ($3 + tmp[3]) / 2);
  13.     }
  14. }
复制代码


./脚本名 1.txt 2.txt

我这里的结果


  1. Administrator@EDENSXY ~
  2. $ ./test.awk 1.txt 2.txt
  3. 00:00,0008,0000497
  4. 00:05,0013,0000587
  5. 00:10,0011,0000401
  6. 00:15,0009,0000362
  7. 00:20,0014,0000507
  8. 00:25,0007,0000429
  9. 00:30,0006,0000323
  10. 00:35,0010,0000393
  11. 00:40,0014,0000447
复制代码


如有错误请指出

[ 本帖最后由 Edengundam 于 2006-11-19 21:28 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2006-11-20 10:28 |只看该作者
感谢!!

在请教一下,如果一次有六各档案要合并呢?

论坛徽章:
0
8 [报告]
发表于 2006-11-20 11:20 |只看该作者

  1. #!/bin/awk -f
  2. BEGIN {
  3.     FS = ","
  4. }

  5. FNR == NR {
  6.     hash[$1] = $0
  7. }
  8. NR > FNR {
  9.     if ($1 in hash)
  10.     {
  11.         split(hash[$1], tmp);
  12.         hash[$1] = sprintf("%s,%.4d,%.7d", $1, $2 + tmp[2], $3 + tmp[3]);
  13.     }
  14. }

  15. END {
  16.     for (item in hash)
  17.     {
  18.         split(hash[item], tmp);
  19.         printf("%s,%.4d,%.7d\n", tmp[1], tmp[2], tmp[3] / 6);
  20.     }
  21. }
复制代码



使用脚本名awk.script

./awk.script file1 file2 file3 file4 file5 file6 > output.txt

sort output.txt

不然结果是没有顺序的>_<我水平差, 就只能这样搞了

论坛徽章:
0
9 [报告]
发表于 2006-11-20 13:14 |只看该作者
再请教一各白痴问题,就是我在linux上可以跑,但是在aix 5.3的环境上都会出现错误:
+ BEGIN {
xxx.awk[2]: BEGIN:  not found
+ FS = ,
xxx.awk[3]: FS:  not found
xxx.awk[4]: syntax error at line 5 : `}' unexpected

论坛徽章:
0
10 [报告]
发表于 2006-11-20 13:33 |只看该作者
aix默认是ksh嘛???

我的脚本第一行 #!/bin/awk -f
aix上你是不是写错了?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP