基于2列对文本文件的行进行分组

时间:2013-09-23 05:39:52

标签: shell command-line

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

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对col1,col3的col2值是多少。 如何使用shell脚本执行此操作?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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