Puncte:0

Cum atașați primul model al unei expresii regulate la sfârșitul unei linii folosind sed?

drapel ke

Am un fișier .fasta (text) care conține date despre secvența ADN în formatul următor:

>uce-8374_Genus_specie
ACGTACGTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTACGATCCGGTATATCGGCGATTCGATCG

>uce-239_Genus_specie
ATCGTAGCATGCGCTAGCTAGCTAGCTCGCGGTACGCATGTCTGACTGCGTCTGGTCGTACGATTACTACGACTGCG

>uce-83_Genus_specie
ATCGATCTAGCGTAGCATGGCATCGATATCTGCGATCGACTCGATGCATGCATGCATCGATGCTAGCTAGCTAGCTA

>uce-902_Genus_specie
AGCTGACTAGCTGGCGATACTGGCGATATCGGATTACGCGGCATATCGAGCGAGTCGATCGATGCATCTGATGCAGC

Încerc să atașez totul înainte de primul subliniere, precedată de a | doar la capătul rândurilor au >. Deci, de exemplu, prima secvență ar citi: uce-8374_Genul_specii|uce-8374, urmată de secvența ADN de sub ea. Există vreo modalitate de a face acest lucru în sed? Am încercat să păstrez ^[^_]+(?=_) într-o variabilă, dar nu a funcționat și a continuat să se adauge ^[^_]+(?=_) până la capătul liniei în locul modelului în sine. Orice ajutor, precum și explicații (deoarece sunt nou în regex) ar fi de ajutor. Dacă există o modalitate mai bună de a face acest lucru, sunt deschis la alte opțiuni!

Până acum, am încercat (voi arăta doar prima secvență de ADN, dar vreau să le schimb pe toate):

sed -E 's/species/species|^[^_]+(?=_)/' sample_file.fasta

Rezultat: uce-8374_Genus_species|^[^_]+(?=_)

si am incercat si eu:

x="^[^_]+(?=_)"
sed -E "s/specie/specie|$x/" "fișier_eșantion.fasta"

Rezultat: uce-8374_Genus_species|^[^_]+(?=_)

Puncte:2
drapel hr

Spre deosebire de Perl, sed nu acceptă sintaxa PCRE lookahead (?=_) dar l-ai putea falsifica astfel:

  • Meci > ancorat la începutul liniei ^>
  • apoi potriviți și capturați zero sau mai multe non-_ personaje ([^_]*)
  • apoi potriviți totul .*

apoi înlocuiți cu

  • întregul model potrivit &
  • urmat de literal | iar apoi primul grup capturat \1

Asa de

$ sed -E 's/^>([^_]*).*/&|\1/' sample_file.fasta 
>uce-8374_Genus_species|uce-8374
ACGTACGTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTACGATCCGGTATATCGGCGATTCGATCG

>uce-239_Genul_specii|uce-239
ATCGTAGCATGCGCTAGCTAGCTAGCTCGCGGTACGCATGTCTGACTGCGTCTGGTCGTACGATTACTACGACTGCG

>uce-83_Genus_specie|uce-83
ATCGATCTAGCGTAGCATGGCATCGATATCTGCGATCGACTCGATGCATGCATGCATCGATGCTAGCTAGCTAGCTA

>uce-902_Genus_species|uce-902
AGCTGACTAGCTGGCGATACTGGCGATATCGGATTACGCGGCATATCGAGCGAGTCGATCGATGCATCTGATGCAGC
Justin avatar
drapel ke
Asta a funcționat! Mulțumesc! Dacă nu te superi, poți să explici ce face asta? în special a doua și a treia parte a sintaxei `sed` aici?
drapel hr
@Justin, vă rugăm să vedeți răspunsul actualizat

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.