sh/bash/dash/ksh/zsh等Shell脚本
-
SmallV
- 论坛版主
- 帖子: 9017
- 注册时间: 2011-01-26 17:52
- 来自: 万林丛中的一抹浓绿,夹带落日余晖的安祥
#1
帖子
由 SmallV » 2012-06-02 9:39
文件A:
代码: 全选
111 90
13 25
aa 15
cc 61
45 66
ww 78
文件B:
代码: 全选
33 78
cc 22
23 89
aa 75
45 62
dd 12
如何将上面两个文件合并到文件C ,按第一个字段合并,如果A中某行第一个字段与B中第一个字段有相同的,就合为C中的一行并把这两行的第二个字段相加作为合并后的新行的第二个字段,如果A或B中第一个字段没有相同的,则直接把该行复制到C中
Just do it, you will succeed!
-
YeLee
- 论坛版主
- 帖子: 26406
- 注册时间: 2008-08-13 8:48
- 系统: Fundu i64
- 来自: 东海硇州,一双管钥。
-
联系:
#2
帖子
由 YeLee » 2012-06-02 9:44
小V好,小V再见。
-
YeLee
- 论坛版主
- 帖子: 26406
- 注册时间: 2008-08-13 8:48
- 系统: Fundu i64
- 来自: 东海硇州,一双管钥。
-
联系:
#3
帖子
由 YeLee » 2012-06-02 9:48
awk吧。
-
qy117121
- 论坛版主
- 帖子: 50587
- 注册时间: 2007-12-14 13:40
- 系统: Winbuntu
- 来自: 志虚国乌由市
-
联系:
#4
帖子
由 qy117121 » 2012-06-02 9:48
码盲路过

-
SmallV
- 论坛版主
- 帖子: 9017
- 注册时间: 2011-01-26 17:52
- 来自: 万林丛中的一抹浓绿,夹带落日余晖的安祥
#5
帖子
由 SmallV » 2012-06-02 9:53
YeLee 写了:awk吧。
小生道行太浅,

Just do it, you will succeed!
-
SmallV
- 论坛版主
- 帖子: 9017
- 注册时间: 2011-01-26 17:52
- 来自: 万林丛中的一抹浓绿,夹带落日余晖的安祥
#6
帖子
由 SmallV » 2012-06-02 9:53
qy117121 写了:码盲路过


Just do it, you will succeed!
-
mjp123
- 帖子: 703
- 注册时间: 2009-04-09 15:06
#7
帖子
由 mjp123 » 2012-06-02 10:19
代码: 全选
awk '{n[$1]=sprintf("%s %s",n[$1],$2)} END {for (e in n) print e " " n[e]}' a b
不知行不?
-
mjp123
- 帖子: 703
- 注册时间: 2009-04-09 15:06
#8
帖子
由 mjp123 » 2012-06-02 10:22
或者
代码: 全选
awk '{n[$1]=n[$1]+$2} END {for (e in n) print e " " n[e]}' a b
-
mjp123
- 帖子: 703
- 注册时间: 2009-04-09 15:06
#9
帖子
由 mjp123 » 2012-06-02 10:27
要保存的话重定向。
代码: 全选
awk '{n[$1]=n[$1]+$2} END {for (e in n) print e " " n[e] > "/tmp/1"}' a b
-
SmallV
- 论坛版主
- 帖子: 9017
- 注册时间: 2011-01-26 17:52
- 来自: 万林丛中的一抹浓绿,夹带落日余晖的安祥
#10
帖子
由 SmallV » 2012-06-02 10:28
mjp123 写了:代码: 全选
awk '{n[$1]=sprintf("%s %s",n[$1],$2)} END {for (e in n) print e " " n[e]}' a b
不知行不?
生成的c:
代码: 全选
45 66 62
cc 61 22
ww 78
dd 12
111 90
13 25
23 89
33 78
aa 15 75
要是能把A、B中第一个字段相同的行的第二个字段加起来作为新行的第二个字段就好了
Just do it, you will succeed!
-
cao627
- 帖子: 992
- 注册时间: 2007-12-05 10:57
- 系统: ubuntu14.04
- 来自: 金山
#11
帖子
由 cao627 » 2012-06-02 10:32
学习

-
mjp123
- 帖子: 703
- 注册时间: 2009-04-09 15:06
#12
帖子
由 mjp123 » 2012-06-02 10:32
代码: 全选
awk '{n[$1]=n[$1]+$2} END {for (e in n) print e " " n[e] > "/tmp/1"}' a b
-
cao627
- 帖子: 992
- 注册时间: 2007-12-05 10:57
- 系统: ubuntu14.04
- 来自: 金山
#13
帖子
由 cao627 » 2012-06-02 10:37
代码: 全选
awk '{n[$1]=sprintf("%s",n[$1]+$2)} END {for (e in n) print e " " n[e]}' a b
-
SmallV
- 论坛版主
- 帖子: 9017
- 注册时间: 2011-01-26 17:52
- 来自: 万林丛中的一抹浓绿,夹带落日余晖的安祥
#14
帖子
由 SmallV » 2012-06-02 10:37
mjp123 写了:代码: 全选
awk '{n[$1]=n[$1]+$2} END {for (e in n) print e " " n[e] > "/tmp/1"}' a b
多谢

Just do it, you will succeed!
-
SmallV
- 论坛版主
- 帖子: 9017
- 注册时间: 2011-01-26 17:52
- 来自: 万林丛中的一抹浓绿,夹带落日余晖的安祥
#15
帖子
由 SmallV » 2012-06-02 10:42
cao627 写了:代码: 全选
awk '{n[$1]=sprintf("%s",n[$1]+$2)} END {for (e in n) print e " " n[e]}' a b
thx

Just do it, you will succeed!