在位置awk
下面的$1
下,打印出计算出的平均值$4
。我似乎无法正确地将语法包含在$1
和$4
之间的输出中。谢谢你:)。
awk '{
if(len==0){
last=$1;total=$4;len=1;getline
}
if($1!=last){
printf("%s\t%f\n", last, total/len);
last=$1;total=$4;len=1
}
else{
total+=$4;len+=1
}
}
END{
printf("%s\t%f\n", last, total/len)
}' Input.bed > output.txt
Input.bed
chr1:955542-955763 AGRN:exon.1 1 0
chr1:955542-955763 AGRN:exon.1 2 0
chr1:955542-955763 AGRN:exon.2 3 0
chr1:955542-955763 AGRN:exon.2 4 1
当前output.txt
chr1:955542-955763 21.289593
chr1:957570-957852 304.861702
所需的output.txt
chr1:955542-955763 AGRN:exon.1 21.289593
chr1:957570-957852 AGRN:exon.2 304.861702
也许
awk '{if(len==0){last=$1;**name=$2**,total=$4;len=1;getline}if($1!=last){printf("%s\t%f\n", last, ,**name**, total/len);last=$1;name=$2;total=$4;len=1}else{total+=$4;len+=1}}END{printf("%s\t%f\n", last,**name**, total/len)}' Input.bed > output.txt
发布的输入和输出不是真实的,所以#的含义并不多:)
修改
awk '{for (i=1; i<=NF; i++) print i, $i}' IonXpress_008_150902_4column.bed | head -4
1 chr1:955542-955763
2 AGRN:exon.1
3 1
4 0
答案 0 :(得分:4)
我认为你的密钥应该是前两个字段的组合。对于您提供的样本输入
$ awk '{k=$1 OFS $2; s[k]+=$4; c[k]++} END{for(i in s) print i, s[i]/c[i]}' file
会产生这个
chr1:955542-955763 AGRN:exon.1 0
chr1:955542-955763 AGRN:exon.2 0.5
如果字段2不是键的一部分,并且您希望从每个字段的最后一行获得值1
$ awk '{k=$1; s[k]+=$4; f2[k]=$2; c[k]++} END{for(i in s) print i, f2[i], s[i]/c[i]}' file
将产生
chr1:955542-955763 AGRN:exon.2 0.25