$ sed 's/_[^_]*$/&&/' file >13_gnd_gnd atcg >14_galF_galF atgc
Замена
sed
будет соответствовать последнему символу подчеркивания в каждой строке и всему, что следует за ним, до конца строки. Это то, что делает шаблон_[^_]*$
("соответствует символу подчеркивания, за которым могут следовать другие символы, не являющиеся символами подчеркивания, и конец строки"). Он заменит это (включая подчеркивание) на то, что было сопоставлено дважды (это то, что&&
делает в бите замены).Так как это файл в формате Fasta, а геномные последовательности не могут содержать символы подчеркивания, для
>
в начале строки не требуется специальной проверки.
Вот рефакторинг, который позволяет избежать чтения всего CSV-файла в память и немного упрощает постобработку.
# Use lower case for private variables
# and https://mywiki.wooledge.org/DontReadLinesWithFor
while read -r acc; do
curl -s "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nuccore&id=${acc}&rettype=fasta&retmode=xml" |
# Run a single awk script for extraction and formatting
awk -v acc="$acc" '/TSeq_taxid/ {
sub(/>.*/, ""); sub(/.*</, ""); print acc "\t" $0 }'
done <csvfile