2017-10-16 48 views
0

嘗試根據第一列將多個行合併爲1。根據另一列合併多行中的一列

Ex。文件1

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

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 - 當迭代通過記錄che CK如果當前鍵$1已經在陣列a(由三元條件$1 in a?執行),如果是的話 - 與電流值使用,作爲分隔$2串聯的先前值a[$1];否則 - 只要與當前值$2


分配輸出:

U604 LRRC69 
U586 PLEKHA5,C8orf77,ZNF252,LINGO2 
U531 5S_rRNA,C3orf33 
S784 CHST5,TMEM231,TM4SF20,TMEM184A 
+0

你是真棒。謝謝。你介意解釋你的代碼在做什麼,所以我可以理解更多,並希望有更少的問題:) – Catherine

+0

@凱瑟琳,歡迎,看我的解釋 – RomanPerekhrest

相關問題