Tôi có tệp .fasta (văn bản) chứa dữ liệu trình tự DNA ở định dạng như sau:
>uce-8374_Genus_species
ACGTACGTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTACGATCGCGGTATATCGGCGATTCGATCG
>uce-239_Genus_species
ATCGTAGCATGCGCTAGCTAGCTAGCTCGCGGTACGCATGTCTGACTGCGTCTGGTCGTACGATTACTACGACTGCG
>uce-83_Genus_species
ATCGATCTAGCGTAGCATGCGATCGATATCTGCGATCGACTCGATGCATGCATGCATCGATGCTAGCTAGCTAGCTA
>uce-902_Genus_species
AGCTGACTAGCTGGCGATACTGGCGATATCGGATTACGCGGCATATCGAGCGAGTCGATCGATGCATCTGATGCAGC
Tôi đang cố nối thêm mọi thứ trước đầu tiên dấu gạch dưới, trước một |
để chỉ cuối dòng có >
. Vì vậy, ví dụ, trình tự đầu tiên sẽ đọc:
uce-8374_Genus_species|uce-8374
, theo sau là chuỗi DNA bên dưới nó. Có cách nào để làm điều này trong sed? Tôi đã thử lưu trữ ^[^_]+(?=_)
vào một biến, nhưng nó không hoạt động và cứ nối thêm ^[^_]+(?=_)
đến cuối dòng thay vì chính mẫu đó. Mọi trợ giúp, cũng như giải thích (vì tôi chưa quen với regex) sẽ hữu ích. Nếu có một cách tốt hơn để giải quyết vấn đề này, tôi sẵn sàng cho các lựa chọn khác!
Cho đến nay, tôi đã thử (tôi sẽ chỉ hiển thị chuỗi DNA đầu tiên, nhưng tôi muốn thay đổi tất cả chúng):
sed -E 's/species/species|^[^_]+(?=_)/' sample_file.fasta
Kết quả: uce-8374_Genus_species|^[^_]+(?=_)
và tôi cũng đã thử:
x="^[^_]+(?=_)"
sed -E "s/species/species|$x/" "sample_file.fasta"
Kết quả: uce-8374_Genus_species|^[^_]+(?=_)