尝试根据第一列将多行合并为1。
实施例。 File1
S784 CHST5,TMEM231
S784 TM4SF20
S784 TMEM184A
U531 5S_rRNA,C3orf33
U604 LRRC69
U586 PLEKHA5,C8orf77
U586 ZNF252,LINGO2
输出文件
S784 CHST5,TMEM231,TM4SF20,TMEM184A
U531 5S_rRNA,C3orf33
U604 LRRC69
U586 PLEKHA5,C8orf77,ZNF252,LINGO2
这是我到目前为止所做的,但它有效,但给我一个额外的逗号,我似乎无法弄清楚如何摆脱......
awk -F'\t' '{a[$1]++; list[$1]=list[$1]","$2} END {for (i in a) print i,FS,list[i]}' File1 > output
当前输出
S784 ,CHST5,TMEM231,TM4SF20,TMEM184A
U531 ,5S_rRNA,C3orf33
U604 ,LRRC69
U586 ,PLEKHA5,C8orf77,ZNF252,LINGO2
我也尝试过使用list[$1]=$2","list[$1]
,但这仍然只是在末尾而不是第2列的开头给我一个额外的逗号。
答案 0 :(得分:0)
Awk 解决方案:
awk -F'\t' '{ a[$1]=($1 in a? a[$1]",":"")$2 }END{ for(i in a) print i,a[i] }' OFS='\t' file
a[$1]
- 数组a
使用第一个字段值$1
($1 in a? a[$1]",":"")$2
- 在遍历记录时检查当前密钥$1
是否已在数组a
中(由三元条件{{执行] 1}}),如果是的话 - 使用$1 in a?
作为分隔符,将前一个值a[$1]
与当前值$2
连接起来;否则 - 只需使用当前值,
输出:
$2