如何使用指定的列作为ID将多个文件中的相应列连接成一个文件?

时间:2015-12-16 02:50:51

标签: bash shell unix awk

如果我有多个文件,例如

1.txt

1;ab, bc
2;cd, de, ef
3;fgh

2.txt

4;bc
1;cd, ef
5;ab
2;g

3.txt

5;ef, hl 
7;a, b, c
3;k, jk
1;b
6;x

假设;是分隔符并且第一列用作ID,如何连接相应的第二列(使用例如逗号),以便输出变为

output.txt

1;ab, bc, cd, ef, b
2;cd, de, ef, g
3;fgh, k, jk
4;bc
5;ab, ef, hl 
7;a, b, c
6;x

2 个答案:

答案 0 :(得分:2)

awk救援!

$ awk -F";" '{a[$1]=a[$1]?a[$1]","$2:$2} 
          END{for(k in a) print k";"a[k]}' file{1,2,3} | sort 

1;ab, bc,cd, ef,b
2;cd, de, ef,g
3;fgh,k, jk
4;bc
5;ab,ef, hl 
6;x
7;a, b, c

答案 1 :(得分:0)

因为join(1)用于连接两个文件,输入必须是排序,所以为什么要这么麻烦。 awk来源:

#!/usr/bin/env awk -f

BEGIN { FS = ";" }
FNR==NR { a[$1] = $2; next}
{
    if ($1 in a) {
        a[$1] = a[$1] ", " $2
    } else {
        a[$1] = $2;
    }
}

END {
    for (i in a) {
        printf("%s%s%s\n", i,FS,a[i]);
    }
}