【发布时间】:2015-10-08 18:34:03
【问题描述】:
感谢@karakfa,下面的awk 数组导致了输出。我正在尝试将$2 添加到数组并输出它。 $2 基本上是唯一条目出现的次数。因为我正在学习 awk 数组,所以我不知道我的尝试是否接近。
输入:
chr1:955542-955763 AGRN:exon.1 1 0
chr1:955542-955763 AGRN:exon.1 2 0
chr1:985542-985763 AGRN:exon.2 1 0
chr1:985542-985763 AGRN:exon.2 2 1
我的脚本:
awk '{k=$1 OFS $2;
l=$2; # Is this correct?
s[k]+=$4; c[k]++}
END{for(i in s) # Is this correct?
print i, s[i]/c[i]},
"(lbases)" # Is this correct?' input
当前输出:
chr1:955542-955763 AGRN:exon.1 0
chr1:985542-985763 AGRN:exon.2 0.5
期望的输出:
chr1:955542-955763 AGRN:exon.1 0 (2 bases)
chr1:985542-985763 AGRN:exon.2 0.5 (2 bases)
【问题讨论】:
-
pluse-uno 用于输入、所需输出、当前输出和代码!!!继续发帖,祝你好运!
-
您了解原始 awk 脚本的工作原理/方式吗?因为没有那样做你想做的事情会变得更加困难。 (具体来说,该尝试完全存储
l的 one 值,并且未在输出中正确包含该变量。) -
我编辑了您的脚本并在此过程中取出了一个明显的语法错误。您的脚本中仍有一些严重的错误,但现在,至少它可以运行了。
-
我理解
awk(在我尝试之前)的方式是$1存储为k,$2中的唯一值定义了用于计算$4平均值的行.我接近了吗?谢谢你:)。 -
awk 的一个弱点是缺乏调试支持(也许其他人会纠正我)。所以你需要学习使用像
print "NR="NR "\tNF="NF"\tValueForVar_k="k "\tValForVar_l=" l这样的语句进行调试。然后,您将很容易看到数据流入和流出脚本。 (使用小文件进行测试!)。祝你好运。
标签: awk