6つのフィールドを持つタブ区切りのファイルがあります。$1
、、、$2
およびフィールドが一致する場合は、$4
そのフィールドを1行にマージし、フィールドを各値に関連付けたいと思います。$5
$6
$3
/
入力.txt
1 109860777 COSN18724706 CT C SORT1
1 154842199 COSM3685920 G GGCTGCTGCTGCTGCT,GGCTGCTGCTGCTGCTGCT KCNN3
1 154842199 COSM5827506 G GGCTGCTGCTGCTGCT,GGCTGCTGCTGCTGCTGCT KCNN3
1 1684347 COSM1320773 C CCCT NADK
1 1684347 COSM1320774 C CCCT NADK
1 1684347 COSM5827581 C CCCT NADK
1 248801602 COSM246232 T TCA OR2T35
出力.txt
1 109860777 COSN18724706 CT C SORT1
1 154842199 COSM3685920/COSM5827506 G GGCTGCTGCTGCTGCT,GGCTGCTGCTGCTGCTGCT KCNN3
1 1684347 COSM1320773/COSM1320774/COSM5827581 C CCCT NADK
1 248801602 COSM246232 T TCA OR2T35
awkを試しましたが、正しい方向にpushを使用できます。
ベストアンサー1
アッ解決策:
awk '{ k=$1 FS $2 FS $4 FS $5 FS $6; a[k]=(k in a)? a[k]"/"$3 : $3 }
END{ for(i in a) {
split(i,b,FS); b[3]=a[i]"\t"b[3]; r="";
for(j=1;j<=NF;j++) {
r=(r!="")? r"\t"b[j] : b[j]
}
print r
}
}' input
出力:
1 1684347 COSM1320773/COSM1320774/COSM5827581 C CCCT NADK
1 109860777 COSN18724706 CT C SORT1
1 154842199 COSM3685920/COSM5827506 G GGCTGCTGCTGCTGCT,GGCTGCTGCTGCTGCTGCT KCNN3
1 248801602 COSM246232 T TCA OR2T35
詳細:
k=$1 FS $2 FS $4 FS $5 FS $6
- 複雑な配列キーa[k]=(k in a)? a[k]"/"$3 : $3
- レコードの3番目のフィールド値を一致/グループ化フィールドに関連付けます。split(i,b,FS)
- 区切り記号で配列キーを分割するb[3]=a[i]"\t"b[3]
- 結果(3番目のフィールド)の値をその位置に挿入します。