繁体   English   中英

将变量传递给awk时出错

[英]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}

请注意,变量varawk变量,而不是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM