2

我有一个这样的文本文件:

1  abc 2
1  rgt 2
1  yhj 2
3  gfk 4
5  kji 6
3  plo 4 
3  vbn 4
5  olk 6

我想根据第一列和第二列对行进行分组,如下所示:

1  abc,rgt,yhj 2
3 gfk,plo,ybn 4
5 kji,olk 6

这样我就可以看到特定一对 col1、col3 的 col2 的值是多少。如何使用 shell 脚本来做到这一点?

4

2 回答 2

0

这应该这样做:

awk -F " " '{ a[$1" "$3]=a[$1" "$3]$2","; }END{ for (i in a)print i, a[i]; }' file.txt | sed 's/,$//g' | awk -F " " '{ tmp=$3;$3=$2;$2=tmp;print }' |sort
于 2013-09-23T06:07:41.003 回答
0

只使用awk:

#!/usr/bin/env awk -f

{
    k = $1 "\x1C" $3
    if (k in a2) {
        a2[k] = a2[k] "," $2
    } else {
        a1[k] = $1
        a2[k] = $2
        a3[k] = $3
        b[++i] = k
    }
}
END {
    for (j = 1; j <= i; ++j) {
        k = b[j]
        print a1[k], a2[k], a3[k]
    }
}

一条线:

awk '{k=$1"\x1C"$3;if(k in a2){a2[k]=a2[k]","$2}else{a1[k]=$1;a2[k]=$2;a3[k]=$3;b[++i]=k}}END{for(j=1;j<=i;++j){k=b[j];print a1[k],a2[k],a3[k]}}' file

输出:

1 abc,rgt,yhj 2
3 gfk,plo,vbn 4
5 kji,olk 6
于 2013-09-23T09:25:36.533 回答