1-е решение: В awk
это не работает, как BASH, у нас есть отдельная print
функция для него echo
не будет работать в нем.Вы можете попробовать выполнить следующее (это удалит все от .
до последней строки для всех частей переданной переменной.
echo "$f" | awk '{for(i=1;i<=NF;i++){sub(/\..*/,"",$i);print $i}}'
HDAC3_CTRL_Diff-D0_A
HDAC3_CTRL_Diff-D0_B
2-е решение ВЕсли вы хотите найти конкретную строку и удалить из нее некоторые части, попробуйте следующее:
echo "$f" | awk 'match($0,/HDAC3[^ ]*/){val=substr($0,RSTART,RLENGTH);sub(/\..*/,"",val);print val}'
HDAC3_CTRL_Diff-D0_A
ИЛИ (форма решения не с одним вкладышем):
f="HDAC3_CTRL_Diff-D0_A.dedup.sorted.bam HDAC3_CTRL_Diff-D0_B.dedup.sorted.bam"
echo "$f" |
awk '
match($0,/HDAC3[^ ]*/){
val=substr($0,RSTART,RLENGTH)
sub(/\..*/,"",val)
print val
}
'
3-е решение: Если кто-то захочет найти точную строку, попробуйте выполнить следующее.
echo "$f" | awk 'match($0,/HDAC3_CTRL_Diff-D[0-9]+_A/){print substr($0,RSTART,RLENGTH)}'
4-е решение: В случае, если в строках разных полей может быть несколько вхождений _A
, попробуйте выполнить следующее.
Предполагая, что ваша переменная f
имеет следующие значения.
echo "$f"
HDAC3_CTRL_Diff-D0_A.dedup.sorted.bam HDAC3_CTRL_Diff-D0_B.dedup.sorted.bam HDAC3_CTRL_Diff-D01_A.dedup.sorted.bam
Теперь, когда мы запускаем новый код:
echo "$f" | awk '{for(i=1;i<=NF;i++){if($i ~ /HDAC3_CTRL_Diff-D[0-9]+_A/){print $i}}}'
HDAC3_CTRL_Diff-D0_A.dedup.sorted.bam
HDAC3_CTRL_Diff-D01_A.dedup.sorted.bam
Проблемыобнаружена в попытке ОП:
awk
не имеет функции echo
, вместо нее используется `print. awk
когдаты пытаешьсяo передать, как awk......$f
, это означает, что вы передаете ему файл Input_file, что НЕ в данном случае, поэтому вы не должны этого делать. - Если это текст, который вы хотите передать
awk
, изатем попробуйте либо echo "text here...." | awk code here.
ИЛИ awk ..... <<<"$var"
для примера.