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的三目表达式!

浙公网安备 33010602011771号