если вам действительно нужен точно такой же текст для замены среднего фрагмента между единственной парой окружающих ' :' в каждой строке файла, тогда это работает
sed -i -- "s|:.*:|:${mynewtext}:|" $inputfile
узор. *просто означает один или несколько символов
Использованиеawk
:
awk -F'\t' '
NR==FNR{ a[$1]=$2; next }
/^>/{
id=a[substr($0, 2)]
if (id!=""){ print ">" id; next }
}
1
' textfile file.fasta
Сначала прочитайте текстовый файл, содержащий сопоставление, и сохраните второе поле в массиве a
, используя первое поле в качестве индекса. Перейти к записи next
.
Затем прочтите файл fasta. Если запись начинается с >
, найдите новый идентификатор в массиве, удалив первый символ из текущей записи(substr($0, 2)
)и используя это значение в качестве индекса массива.
Если идентификатор не пуст, напечатайте >
и идентификатор и перейдите к записи next
.
1
печатает текущую запись, (последовательности или не совпадающие -идентификаторы ).
awk -F'\t' '
NR==FNR { map[">"$1] = ">"$2; next }
$0 in map { $0 = map[$0] }
{ print }
' mapfile fastafile