我正在尝试使用awk
以下列格式输出数据。
`$4` is `last # in `$6` that matches `$4` and maps to `$5` with an average depth of `average of $7` that matches `$4`
输入
chr1 955543 955763 chr1:955543-955763 AGRN-6|gc=75 1 20
chr1 955543 955763 chr1:955543-955763 AGRN-6|gc=75 2 20
chr1 955543 955763 chr1:955543-955763 AGRN-6|gc=75 3 22
chr1 957571 957852 chr1:957571-957852 AGRN-7|gc=61.2 1 201
chr1 957571 957852 chr1:957571-957852 AGRN-7|gc=61.2 2 201
chr1 957571 957852 chr1:957571-957852 AGRN-7|gc=61.2 3 201
chr1 957571 957852 chr1:957571-957852 AGRN-7|gc=61.2 4 202
所需的输出
chr1:955543-955763 is 3 bases and maps to AGRN-6|gc=75 with an average depth of 20.6
chr1:957571-957852 is 4 bases and maps to AGRN-7|gc=61.2 with an average depth of 201.3
我认为这个awk
很接近,希望是一个好的开始。谢谢你:)。
awk '
{N[$4]++
T[$4]+=$6
M[$4]=$7
}
END {for (X in N) printf ("%s is %d bases and maps to %s with an average depth"\
" of %f reads\n", X, N[X], M[X], T[X]/N[X]);
}
' input.txt > output.txt
答案 0 :(得分:1)
这是一个没有格式化和单词的工作原型
$ awk '{k=$4 FS $5; a[k]+=$7; c[k]++}
END{for(k in a)
{split(k,ks,FS);
print ks[1],c[k],ks[2],a[k]/c[k]}}' file
chr1:957571-957852 4 AGRN-7|gc=61.2 201.25
chr1:955543-955763 3 AGRN-6|gc=75 20.6667
添加缺少的单词并使用printf进行数字格式化(如果重要)。 awk
对数组进行洗牌并丢失订单,但如果您使用gawk