2013-09-23 82 views
2

我有一個文本文件,這樣分組的文本文件的行:基於2列

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

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

我想小組第一和第二列的這樣的基礎上,行

這樣我可以看到col2對於col1,col3的特定對的值是多少。 我怎樣才能使用shell腳本來做到這一點?

回答

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 
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