2016-08-08 11 views
0

Ich habe einen Tabulator getrennte Datei als folgt-Concatenate zwei Spalten und fügen Sie die fusionierte Spalte

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 

Ich möchte zwei Spalten name1 und name2 (durch „__“ verbunden) verketten. Die fusionierte Spalte sollte eingefügt als neue Spalte "merged_names" in einer neuen Datei. Wie kann ich es mit awk tun?

Erwartete Ausgabe -

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

Hausaufgabe? – ams

Antwort

2

Sie können awk verwenden:

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

Mehr awk verkürzt:

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

ausgezeichnete Tipps, NF, NR zu verwenden. Vielen Dank – 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

Ich frage mich, ob Sie irgendwie diese lange Liste mit Print vermeiden könnten. ++ sowieso .. Sie haben Zeichenfolgen beim Drucken verkettet und es ist erwähnenswert, dass in einer Notiz. – sjsam

Verwandte Themen