非法参考AWK数组(我有麻烦搞清楚AWK)
问题描述:
我想使用的脚本是:非法参考AWK数组(我有麻烦搞清楚AWK)
cat gatk_probes.interval_list |
awk '
BEGIN{
OFS="\t";
print "#CHR\tBP1\tBP2\tID"
}
{
split($1,a,":");
chr=a[1];
if (match(chr,"chr")==0) {
chr="chr"chr
}
split(a[2],b,"-");
bp1=b[1];
bp2=bp1;
if (length(b) > 1) {
bp2=b[2]
}
print chr,bp1,bp2,NR
}' > ./EXOME.targets.reg
我收到错误:
awk: line 1: illegal reference to array b
有明显的错误?
答
length(b)
搞砸了你,显然不是每个awk的实现都支持它。您可以这样做:
BEGIN
{
OFS="\t";
print "#CHR\tBP1\tBP2\tID"
}
{
split($1,a,":");
chr=a[1];
if (match(chr,"chr")==0)
{
chr="chr"chr
}
blength = split(a[2],b,"-");
bp1=b[1];
bp2=bp1;
if (blength > 1)
{
bp2=b[2]
}
print chr,bp1,bp2,NR
}
split返回数组中元素的数量(在本例中为b)。
+0
+1。是的,length(array)是一个gawk扩展,并且如你所示,它是不必要的,因为split(string,array,re)返回数组中元素的个数。你可以摆脱虚假的尾随分号。 –
+0
谢谢你,工作正常 – user1340048
如果您包含一些样本输入和所需的输出,回答这些问题总是更容易。所有你需要做的是[编辑](http://stackoverflow.com/posts/14720898/edit)你的问题。 – Steve
UUOC。改掉'cat'并使用'awk'...'gatk_probes.interval_list> EXOME.targets.reg'来代替。 –