Score:0

คุณจะผนวกรูปแบบแรกของนิพจน์ทั่วไปต่อท้ายบรรทัดโดยใช้ sed ได้อย่างไร

ธง ke

ฉันมีไฟล์ .fasta (ข้อความ) ที่มีข้อมูลลำดับ DNA ในรูปแบบดังต่อไปนี้:

>uce-8374_Genus_สปีชีส์
ACGTACGTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTACGATCGCGGTATTATCGGCGATTCGATCG

>uce-239_Genus_สปีชีส์
ATCGTAGCATGGCGCTAGCTAGCTAGCTCGCGGTACGCATGTCTGACTGCCGTCTGGTCGTACGATTACTACGACTGCCG

>uce-83_Genus_สปีชีส์
ATCGATCTAGCGTAGCATGCGATCGATATCTGCGATCGACTCGATGCATGCATGCATCGATGCTAGCTAGCTAGCTA

>uce-902_Genus_สปีชีส์
AGCTGACTAGCTGGCGATACTGGCGATTCGGATTACGCGGCATATCGAGCGAGTCGATCGATGCATCTGATGCAGC

ฉันพยายามผนวกทุกอย่างก่อนหน้า แรก ขีดล่างนำหน้าด้วย | เฉพาะส่วนท้ายของบรรทัดเท่านั้นที่มี >. ตัวอย่างเช่น ลำดับแรกจะอ่านว่า: uce-8374_Genus_species|uce-8374ตามด้วยลำดับดีเอ็นเอข้างใต้ มีวิธีการทำเช่นนี้ใน sed หรือไม่? ฉันพยายามเก็บ ^[^_]+(?=_) ลงในตัวแปร แต่มันใช้งานไม่ได้และยังคงต่อท้าย ^[^_]+(?=_) ไปที่จุดสิ้นสุดของเส้นแทนที่จะเป็นรูปแบบ ความช่วยเหลือใด ๆ รวมถึงคำอธิบาย (เนื่องจากฉันยังใหม่กับ regex) จะเป็นประโยชน์ หากมีวิธีที่ดีกว่านี้ ฉันเปิดรับตัวเลือกอื่น!

จนถึงตอนนี้ ฉันได้ลองแล้ว (ฉันจะแสดงลำดับ DNA แรกเท่านั้น แต่ฉันต้องการเปลี่ยนทั้งหมด):

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

ผลลัพธ์: uce-8374_Genus_species|^[^_]+(?=_)

และฉันได้พยายามด้วย:

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

ผลลัพธ์: uce-8374_Genus_species|^[^_]+(?=_)

Score:2
ธง hr

ซึ่งแตกต่างจาก Perl, sed ไม่สนับสนุนไวยากรณ์ lookahead ของ PCRE (?=_) แต่คุณสามารถปลอมได้ดังนี้:

  • จับคู่ > ทอดสมออยู่ที่จุดเริ่มต้นของบรรทัด ^>
  • จากนั้นจับคู่และจับศูนย์หรือมากกว่าที่ไม่ใช่_ ตัวละคร ([^_]*)
  • จากนั้นจับคู่ทุกอย่างอื่น .*

แล้วแทนที่ด้วย

  • รูปแบบที่ตรงกันทั้งหมด &
  • ตามด้วยตัวอักษร | และกลุ่มแรกที่จับได้ \1

ดังนั้น

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

>uce-239_Genus_species|uce-239
ATCGTAGCATGGCGCTAGCTAGCTAGCTCGCGGTACGCATGTCTGACTGCCGTCTGGTCGTACGATTACTACGACTGCCG

>uce-83_Genus_species|uce-83
ATCGATCTAGCGTAGCATGCGATCGATATCTGCGATCGACTCGATGCATGCATGCATCGATGCTAGCTAGCTAGCTA

>uce-902_Genus_species|uce-902
AGCTGACTAGCTGGCGATACTGGCGATTCGGATTACGCGGCATATCGAGCGAGTCGATCGATGCATCTGATGCAGC
Justin avatar
ke flag
ได้ผล! ขอขอบคุณ! ถ้าไม่รังเกียจ ช่วยอธิบายได้ไหมว่าสิ่งนี้กำลังทำอะไรอยู่? โดยเฉพาะส่วนที่สองและสามของไวยากรณ์ `sed` ที่นี่?
hr flag
@จัสติน โปรดดูคำตอบที่อัปเดต

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา