[英]Errors when passing variable to awk
我正在尝试使用awk -v
将外部变量传递给awk,但是无法弄清楚我的问题是什么!
for ((c=1;c<=22;c++));do cat hg19.gap.bed|awk -v var={chr"$c"} '{if ("$1"=="$var") print}' > $var.cbs;done
这个命令有什么问题? 谢谢
在awk中,仅字段变量以$
开头。 而且您不希望awk中使用双引号。 尝试if ($1 == var) ...
实际上,使用$var
意味着索引中存储在var
的字段,在这种情况下不是有效字段(但是您可以使用它来遍历这些字段)。
var={chr"$c"}
应该产生什么?
在这种情况下,它确实产生的是{chr1}
, {chr2}
,..., {chr22}
。
请注意,变量var
是awk
变量,而不是shell变量。 您必须重定向到"{chr$c}.cbs"
以获取22个单独的文件。 在脚本内, $var
将始终为$0
因为var
的数字为0
。
您肯定可以一次完成所有操作,而不必运行22次命令。 假设您在MacOS X(BSD)上使用gawk
(GNU Awk
)或awk
或任何POSIX兼容的awk
,则可以编写:
awk '$1 ~ /\{chr([1-9]|1[0-9]|2[012])\}/ {file=$1".cbs"; print $0 >file;}' hg19.gap.bed
这样一来就可以通过数据文件完成整个工作。
我假设chr只是一些字符串,并且您想与chr1,chr2等匹配。
for ((c=1;c<=22;c++));do cat hg19.gap.bed | awk -v var=chr"$c" '"$1"==var {print}' > chr"$c".cbs;done
让我知道这是否适合您。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.