2017-05-02 1 views
0

Ich habe mehrere Dateien, die in einer bestimmten Art und Weise geschriebenen Zeilen enthält, zum Beispiel wie folgt aus:Regexp in bash - bearbeiten Linien

>m.144 g.144 ORF g.144 m.144 type:internal len:123 (+) Pf1004_1/1_1.000_369:1-372(+) 

ich sed Befehle mit regexp verwenden möchten einige Zeichen zu löschen, um zu haben, Dieses Format:

>Pf1004_1/1_1.000_369 

Aber es funktioniert nicht: /. Ich habe das folgende Skript verwendet:

#/bin/bash 

for file in *.fasta # Set of fasta files in the script directory 
do  
    sed -i "s/.+?\(\+\) />/g" $file 
    sed -i "s/:.+//g" $file 
done 

Was ist los? Hier ist eine Übersicht über eine meiner Dateien:

>m.187 g.187 ORF g.187 m.187 type:internal len:115 (+) Ph1000_1/1_1.000_345:1-348(+) 
LIILLTSVSVVVLLVENHLSPSHSVLDLSSEPPTGNATYHCWEVAETVIVIKECSPCSVF 
EQKTNPACKETGYSQKVLCMLKDGTESKLPRSCPKITWVEEKQFWLFEVLMALLG 
>m.188 g.188 ORF g.188 m.188 type:internal len:100 (+) Ph1002_1/1_1.000_302:1-303(+) 
KTDTPRRQRSMSPVANVSCSPSVSSPNLLMKLLDSSDESESDTPHPNRVKVLKPDDMGIK 
DFFKNTAAKQGLEERVDVSIQDFDHIINEASDRLPCTKKI 
>m.189 g.189 ORF g.189 m.189 type:internal len:125 (+) Ph1007_1/1_1.000_376:1-378(+) 
QSATPLHRAAEANRKQAVAELLHAGCDVNRQNEVSITPIFYPAQRGDDVTTRLLIQNGAD 
PNVTDAEDWIPLHFASQNGHVATVDALTSARSMVNAAGSHGETPLLIAAEQGHDKVVKHL 
LANGA 
>m.190 g.190 ORF g.190 m.190 type:internal len:129 (+) Ph1010_1/1_1.000_387:1-390(+) 
HVADTGTSSSPQLSPTHAERRPLKVEFIGMKDMASGDTSGRDKRPGVENDLKRINRKATN 
CARYQQPRMSLLGKPLNYRAHKRDVRYRRAQAKVYNFLERPKDWRAISYHLLVYVELRDS 
TLTVFHPSM 
>m.191 g.191 ORF g.191 m.191 type:internal len:185 (+) Ph1014_1/1_1.000_555:1-558(+) 
CLADLVTASDNMENDLSDNSNLDQSGTMYAFAAKRKSYGQVKDADHVDSGGDNPERQERP 
MSPMCLKIRKSDNGLSPEARRPVTSPSPISPAAPVSDHVDADRDVIERAKELQKAELDKV 
VASSFPVPQSGFRSVHSVDISPLHRISVPWPHPVHQPIFPHPHPVALQMSLSNSFRAQNP 
DACIR 
>m.192 g.192 ORF g.192 m.192 type:internal len:183 (+) Ph1025_1/1_1.000_551:1-552(+) 
TQKDWRELLWTYCCCCSKRHVHAEDVDKSAVTSLSEVKAEKQLKSPAKIKTIRNHADVKS 
ALSTSCLRRKKNFEEQTICKNELNVKHSDDDNRDMDKQDTKTAITLTPKCFVHFPKSVNH 
LQLDQTPLYWGAVSKEAASLCSLPVRNGCTVAAVKDVQDPHLLEIGQVYQNDEEWTPKEL 
TAD 
>m.19 g.19 ORF g.19 m.19 type:internal len:348 (+) Ph103_1/1_1.000_1044:1-1047(+) 
GGHLPSFNDRPGNTMAGSKDDKTNLSPVKLELISPCGPVLSNHVGCIVNNVLYIHGGINK 
YLSKEPLNAFYKLNLNAPSPIWQEILDRNSPHLSHHACVVLDNRYLVLIGGWNGKQRTAD 
MWAYDVQEAVWISLRTSGFPEGAGLSSHAALPLADGSILVIGREGSARIQRRYGNSWLIR 
GSVMRGHFVYNEHQMSLASRSGHTMHVIGSDLTIIGGRSDRQVEQHGGYRTAMTSSAVAF 
FSGLNQFVKRTPPMAKPPCGRKQHVSASGSGLILIHGGETFDGKSRHPVGDFYIISLRPT 
VTWYHLGTSGVGRAGHVCCTAADKIIIHGGMGPRNAIYGDTYEISLSK 
>m.193 g.193 ORF g.193 m.193 type:internal len:130 (+) Ph1046_1/1_1.000_390:1-393(+) 
LFRLASESYHSSKMVQRLTLRRRLSYNTSSNRRRIVKTPGGRLVYHYTKKPGAIPICKSG 
GCRTKLHGIRPSRPMQRRRMSKRLKTVNRTYGGVQCHTCVREKIIRAFLIEEQKIVVKVL 
KAQAAQAKKA 

Antwort

0

Ersetzen Sie Ihre 2 sed Ausdrücke mit dem folgenden:

sed -E 's/^>.+\(\+\) ([^:]+):.+$/>\1/' $file 
0

Warum nicht so etwas wie:

sed -e 's/^.*[ ]([+])[ ]/>/g' -e 's/[:].*$//' $file 

Der erste Ausdruck:

's/^.*[ ]([+])[ ]/>/g' 

wird von Anfang bis zum ersten space gefolgt von (+)space entfernt.

Der zweite Ausdruck:

's/[:].*$//' 

einfach alles zerhackt, die von den : bis zum Ende bleibt.

Beispiel

$ echo ">m.144 g.144 ORF g.144 m.144 type:internal len:123 (+) Pf1004_1/1_1.000_369:1-372(+)" | \ 
    sed -e 's/^.*[ ]([+])[ ]/>/g' -e 's/[:].*$//' 
>Pf1004_1/1_1.000_369 
0

Je nachdem, wie gut strukturiert Ihre Daten vorhanden sind, diese einfache awk Skript könnte genug sein, um:

awk -F '[ :]' '/^>/ { print ">" $12; next } 1' infile 

Ausgang:

>Ph1000_1/1_1.000_345 
LIILLTSVSVVVLLVENHLSPSHSVLDLSSEPPTGNATYHCWEVAETVIVIKECSPCSVF 
EQKTNPACKETGYSQKVLCMLKDGTESKLPRSCPKITWVEEKQFWLFEVLMALLG 
>Ph1002_1/1_1.000_302 
KTDTPRRQRSMSPVANVSCSPSVSSPNLLMKLLDSSDESESDTPHPNRVKVLKPDDMGIK 
DFFKNTAAKQGLEERVDVSIQDFDHIINEASDRLPCTKKI 
>Ph1007_1/1_1.000_376 
QSATPLHRAAEANRKQAVAELLHAGCDVNRQNEVSITPIFYPAQRGDDVTTRLLIQNGAD 
PNVTDAEDWIPLHFASQNGHVATVDALTSARSMVNAAGSHGETPLLIAAEQGHDKVVKHL 
LANGA 
>Ph1010_1/1_1.000_387 
HVADTGTSSSPQLSPTHAERRPLKVEFIGMKDMASGDTSGRDKRPGVENDLKRINRKATN 
CARYQQPRMSLLGKPLNYRAHKRDVRYRRAQAKVYNFLERPKDWRAISYHLLVYVELRDS 
TLTVFHPSM 
>Ph1014_1/1_1.000_555 
CLADLVTASDNMENDLSDNSNLDQSGTMYAFAAKRKSYGQVKDADHVDSGGDNPERQERP 
MSPMCLKIRKSDNGLSPEARRPVTSPSPISPAAPVSDHVDADRDVIERAKELQKAELDKV 
VASSFPVPQSGFRSVHSVDISPLHRISVPWPHPVHQPIFPHPHPVALQMSLSNSFRAQNP 
DACIR 
>Ph1025_1/1_1.000_551 
TQKDWRELLWTYCCCCSKRHVHAEDVDKSAVTSLSEVKAEKQLKSPAKIKTIRNHADVKS 
ALSTSCLRRKKNFEEQTICKNELNVKHSDDDNRDMDKQDTKTAITLTPKCFVHFPKSVNH 
LQLDQTPLYWGAVSKEAASLCSLPVRNGCTVAAVKDVQDPHLLEIGQVYQNDEEWTPKEL 
TAD 
>Ph103_1/1_1.000_1044 
GGHLPSFNDRPGNTMAGSKDDKTNLSPVKLELISPCGPVLSNHVGCIVNNVLYIHGGINK 
YLSKEPLNAFYKLNLNAPSPIWQEILDRNSPHLSHHACVVLDNRYLVLIGGWNGKQRTAD 
MWAYDVQEAVWISLRTSGFPEGAGLSSHAALPLADGSILVIGREGSARIQRRYGNSWLIR 
GSVMRGHFVYNEHQMSLASRSGHTMHVIGSDLTIIGGRSDRQVEQHGGYRTAMTSSAVAF 
FSGLNQFVKRTPPMAKPPCGRKQHVSASGSGLILIHGGETFDGKSRHPVGDFYIISLRPT 
VTWYHLGTSGVGRAGHVCCTAADKIIIHGGMGPRNAIYGDTYEISLSK 
>Ph1046_1/1_1.000_390 
LFRLASESYHSSKMVQRLTLRRRLSYNTSSNRRRIVKTPGGRLVYHYTKKPGAIPICKSG 
GCRTKLHGIRPSRPMQRRRMSKRLKTVNRTYGGVQCHTCVREKIIRAFLIEEQKIVVKVL 
KAQAAQAKKA 
Verwandte Themen