Что должен произвести var={chr"$c"}
?
В этом контексте он производит {chr1}
, {chr2}
, ..., {chr22}
.
Обратите внимание, что переменная var
является переменной awk
, а не переменной оболочки. Вам нужно перенаправить на "{chr$c}.cbs"
, чтобы получить 22 отдельных файла. Внутри скрипта $var
всегда будет $0
, поскольку var
оценивается как число 0
.
Вместо того, чтобы выполнить команду 22 раза, вы, безусловно, можете сделать все это за один проход. Предполагая, что вы используете gawk
(GNU Awk
) или awk
на MacOS X (BSD) или любой POSIX-совместимый awk
, вы можете написать:
awk '$1 ~ /\{chr([1-9]|1[0-9]|2[012])\}/ {file=$1".cbs"; print $0 >file;}' hg19.gap.bed
Это делает всю работу за один проход через файл данных.