我有一个这样的文本文件:
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 脚本来做到这一点?
我有一个这样的文本文件:
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 脚本来做到这一点?
这应该这样做:
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
只使用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