Если я правильно понял ваше требование, не могли бы вы попробовать следующее.
val="_string"
awk -v value="$val" '{sub(".bam",value"&")} 1' Input_file
Краткое объяснение: -v value
означает передачу переменной оболочки с именем val
значение для переменной awk variable
здесь.Затем используя sub
функцию awk
для замены строки .bam
на строковое значение наряду со значением .bam
, которое также обозначается &
.Тогда упоминание 1
означает печать отредактированной / нередактированной строки.
Почему попытка OP не сработала: Уважаемый OP.в awk
мы не можем передавать переменные оболочки напрямую, не упоминая их на awk
языке.Так что то, что вы пытаетесь, НЕ примет это как переменную awk
, а не примет ее как строку и напечатает как есть.Я уже упоминал в своем объяснении выше, как определять переменные оболочки в awk
.
ПРИМЕЧАНИЕ: Если у вас есть несколько вхождений .bam
, тогда, пожалуйста,измените sub
на gsub
в приведенном выше коде.Также, если ваш Input_file является разделителем TAB, используйте awk -F'\t'
в приведенном выше коде.