awk处理案例二

【场景】

我手头上有三个文件,他们的格式都是一样的,总共5列.如果我想求他们的并集,并且如果前三列相同第四列的数字相加,第五列信息合并.我尝试用awk去做,可是结果并不齐全.应该怎么做呢?
以下是文件格式:

1.a.txt

 WINGS 1000 4000 3 3/20_505 
 WINGS 5000 6000 8 8/20_505
 SANLY 2000 4000 9 9/20_505
 TINAG 8000 10000 11 11/20_505

2.b.txt

 WINGS 1000 4000 3 3/18_707
 ANNY 4000 7000 4 4/18_707
 MOLLY 3000 4300 5 5/18_707
 TINAG 8000 10000 6 6/18_707

3.txt

 VEELY 2000 4000 4 4/20_808 
 WINGS 5000 6000 5 5/20_808
 ANNY 4000 7000 9 9/20_808
 TINAG 8000 10000 4 4/20_808

结果是:

 WINGS 1000 4000 6 3/20_505;3/18_707 
 WINGS 5000 6000 13 8/20_505;5/20_808
 SANLY 2000 4000 9 9/20_505
 TINAG 8000 10000 2111/20_505;6/18_707;4/20_808
 ANNY 4000 7000 13 4/18_707;9/20_808
 MOLLY 3000 4300 5 5/18_707
 VEELY 2000 4000 4 4/20_808 

【代码如下】

awk '{i=$1FS$2FS$3;a[i]=i;b[i]+=$4;c[i]=c[i]?c[i]";"$5:$5}END{for(i in a)print a[i],b[i],c[i]}'  a.txt b.txt c.txt

【测试结果如下】

[li0924@localhost awk]$ awk '{i=$1FS$2FS$3;a[i]=i;b[i]+=$4;c[i]=c[i]?c[i]";"$5:$5}END{for(i in a)print a[i],b[i],c[i]}'  a.txt b.txt c.txt
VEELY 2000 4000 4 4/20_808
MOLLY 3000 4300 5 5/18_707
WINGS 5000 6000 13 8/20_505;5/20_808
WINGS 1000 4000 6 3/20_505;3/18_707
TINAG 8000 10000 21 11/20_505;6/18_707;4/20_808
ANNY 4000 7000 13 4/18_707;9/20_808
SANLY 2000 4000 9 9/20_505

【解析】
根据题意:是要对第4列做和;第5列组合;所以把这两列分别整理为b数组,c数组进行处理;其中用到awk的三目表达式!

 

posted @ 2013-09-09 21:28  lottu  阅读(337)  评论(0)    收藏  举报