2016-08-08 4 views
0

У меня есть вкладка разделителями файл следующим образом-Соединить две колонки и вставьте слиты столбец

loci1 loci2 name1 name2 
    utr3p utr3p TERF1 ISCA2 
    utr3p intron LPP PAAF1 
    utr3p intron RPL37A RCC1 
    coding intron BAG2 RP11 
    intron intron KIF1B SNORA21 
    intron downstream GUSBP4 CTD 
    intron intron CLTC VMP1 
    utr3p utr3p PCYT1A ZHX3 

Я хотел бы объединить два столбца name1 и name2 (соединенные «__»). Объединённая колонна должна быть вставлен как новый столбец «merged_names» в новый файл. Как это сделать, используя awk.

Ожидаемый результат -

loci1 loci2 name1 name2 merged_names 
utr3p utr3p TERF1 ISCA2 TERF1__ISCA2 
utr3p intron LPP PAAF1 LPP__PAAF1 
utr3p intron RPL37A RCC1 RPL37A__RCC1 
coding intron BAG2 RP11 BAG2__RP11 
intron intron KIF1B SNORA21 KIF1B__SNORA21 
intron downstream GUSBP4 CTD GUSBP4__CTD 
intron intron CLTC VMP1 CLTC__VMP1 
utr3p utr3p PCYT1A ZHX3 PCYT1A__ZHX3 
+0

Домашнее задание? – ams

ответ

2

Вы можете использовать этот awk:

awk 'BEGIN{OFS=FS="\t"} NR==1{$(NF+1)="merged_names"} NR!=1{$(NF+1)=$(NF-1) "__" $NF}1' file 

Более укоротить awk:

awk 'BEGIN{OFS=FS="\t"} {$(NF+1)=(NR==1)? "merged_names" : $(NF-1)"__"$NF}1' file 
+0

отличные советы по использованию NF, NR. благодаря – panbar

2
awk 'BEGIN{OFS="\t"; print "loci1 loci2 name1 name2 MERGED__NAMES"} {print $1,$2,$3,$4,$3 "__" $4}' infile 
loci1 loci2 name1 name2 MERGED__NAMES 
loci1 loci2 name1 name2 name1__name2 
utr3p utr3p TERF1 ISCA2 TERF1__ISCA2 
utr3p intron LPP  PAAF1 LPP__PAAF1 
utr3p intron RPL37A RCC1 RPL37A__RCC1 
coding intron BAG2 RP11 BAG2__RP11 
intron intron KIF1B SNORA21 KIF1B__SNORA21 
intron downstream  GUSBP4 CTD  GUSBP4__CTD 
intron intron CLTC VMP1 CLTC__VMP1 
utr3p utr3p PCYT1A ZHX3 PCYT1A__ZHX3 
+0

Мне было интересно, если вы можете каким-то образом избежать этого длинного списка с печатью. ++ в любом случае. У вас есть конкатенированные строки во время печати, и стоит упомянуть об этом в примечании. – sjsam

Смежные вопросы