使用awk处理多个文件

使用awk处理多个文件,awk,syntax,Awk,Syntax,我想数一数每个间隔的点数。我在第一个文件中有点的位置,在第二个文件中有间隔。首先,我将点属性存储在两个数组(pos和name)中,然后我想循环它们以确定它是否属于给定的间隔($1是名称,$2是开始,$3是间隔的结束)。我有以下代码: awk 'NR==FNR{name[NR]=$1;pos[NR]=$2;next}; {for (i in name) if (name[i] == $1 && pos[i] >= $2 && pos[i] <= $3)

我想数一数每个间隔的点数。我在第一个文件中有点的位置,在第二个文件中有间隔。首先,我将点属性存储在两个数组(pos和name)中,然后我想循环它们以确定它是否属于给定的间隔($1是名称,$2是开始,$3是间隔的结束)。我有以下代码:

awk 'NR==FNR{name[NR]=$1;pos[NR]=$2;next}; {for (i in name) if (name[i] == $1 && pos[i] >= $2 && pos[i] <= $3) {sum[NR] += 1;}} END {for (i = 1; i <=length(sum); i++) {print sum[i]}} file1 file2 > out'

谢谢

您的
位置错误,并且
awk
命令未正确结束,请尝试以下操作。无法测试,因为未提供任何样本


awk'NR==FNR{name[NR]=1;pos[NR]=2;next};{对于(名称中的i)如果(名称[i]=$1&&pos[i]>=$2&&pos[i]=$2&&pos[i],请提供最少的示例输入文件。请将示例输入(无描述、无图像、无链接)和该示例输入的所需输出添加到您的问题中(无评论)。抱歉,这是生物信息学领域的一项研究工作。输入文件非常丰富,我只是对语法很好奇。但你是对的,下次我提供一些小的输入文件。我们可以很容易地消除你的语法错误,但如果没有一个包含简明、可测试的样本输入和预期输出的文件,我们无法帮助你修复你的sc你想让它做什么就做什么。
awk '
NR==FNR{
  name[NR]=$1
  pos[NR]=$2
  next
}
{
  for(i in name){
    if(name[i] == $1 && pos[i] >= $2 && pos[i] <= $3){ sum[FNR] += 1; }
  }
}
END {
  for(i = 1; i <=FNR; i++){
    print sum[i];
  }
}
' points windows > output
points:

chr1    52
chr1    65
chr2    120
chr2    101
chr2    160
chr3    20
chr4    50

windows:

chr1    0   100
chr1    100     200
chr2    0   100
chr2    100     200
chr3    0   100
chr3    100     200
chr4    0   100
chr5    0   100
chr6    0   100
chr6    100     200
chr7    0   100
chr8    0   100

gave me the desired output:

2


3
1

1
awk '
NR==FNR{
  name[NR]=$1
  pos[NR]=$2
  next
}
{
  for(i in name){
    if(name[i] == $1 && pos[i] >= $2 && pos[i] <= $3){ sum[NR] += 1 }
  }
}
END{
  for(i = 1; i <=length(sum); i++){
    print sum[i]
  }
}
' file1 file2 > out