我尝试使用的脚本是:
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)。
关于linux - 在awk中非法引用数组(我在弄清楚awk时遇到了麻烦),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14720898/