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