【发布时间】:2014-12-14 11:43:52
【问题描述】:
我很确定这很简单,但我没有找到与此问题相关的问题。
我正在使用下一个代码在PosGen.bed 的第 5 列中打印给定基因的第一个起始位点和最终结束位点
awk 'BEGIN{ch=$1;ini=$2;fin=$3;gen=$5}{if(gen==$5){fin=$3}else{print ch"\t"ini"\t"fin"\t"gen;ch=$1;ini=$2;fin=$3;gen=$5}}}END{print ch"\t"ini"\t"fin"\t"gen}' PosGen.bed | head
我所做的是保留第一个站点>BEGINif 将验证下一行,甚至第一行是否具有相同的基因名称,如果是,则用新的结束位点刷新结束位点。
如果检测到其他基因名称,它将打印出所有实际信息并替换为新基因的信息。我的代码按预期工作,但我无法摆脱最初的那一行;这可以很容易地从输出文件中删除,但我渴望学习并最终掌握awk...
所以,问题是:我的代码打印了一个初始的空行,我还没有检测到原因,你知道为什么打印一个空行吗?
我虽然这是因为 {braquets} 放错了位置,但这似乎不是问题。 这是我得到的输出和输入的示例。
我们将不胜感激任何帮助! 谢谢!
输出文件(与我们的朋友空行)
chr1 3204563 3661429 Xkr4
chr1 4280927 4399268 Rp1
chr1 4481009 4486494 Sox17
chr1 4763279 4775758 Mrpl15
输入文件
chr1 3204563 3207049 - Xkr4
chr1 3206103 3206105 - Xkr4
chr1 3206106 3207049 - Xkr4
chr1 3411783 3411982 - Xkr4
chr1 3411783 3411982 - Xkr4
chr1 3660633 3661429 - Xkr4
chr1 3660633 3661579 - Xkr4
chr1 3661427 3661429 - Xkr4
chr1 4280927 4283093 - Rp1
chr1 4283062 4283064 - Rp1
chr1 4283065 4283093 - Rp1
chr1 4333588 4340172 - Rp1
chr1 4334681 4334683 - Rp1
chr1 4334684 4340172 - Rp1
chr1 4341991 4342162 - Rp1
chr1 4341991 4342162 - Rp1
chr1 4341991 4342162 - Rp1
chr1 4341991 4342162 - Rp1
chr1 4342283 4342906 - Rp1
chr1 4342283 4342918 - Rp1
chr1 4342283 4342918 - Rp1
chr1 4342283 4342918 - Rp1
chr1 4342904 4342906 - Rp1
chr1 4350281 4350395 - Rp1
chr1 4399251 4399268 - Rp1
chr1 4399251 4399322 - Rp1
chr1 4399266 4399268 - Rp1
chr1 4481009 4482749 - Sox17
chr1 4481797 4481799 - Sox17
chr1 4481800 4482749 - Sox17
chr1 4483181 4483487 - Sox17
chr1 4483181 4483547 - Sox17
chr1 4483485 4483487 - Sox17
chr1 4483853 4483944 - Sox17
chr1 4485217 4486023 - Sox17
chr1 4486372 4486494 - Sox17
chr1 4763279 4764597 - Mrpl15
【问题讨论】:
-
空白非常便宜,在编写代码时投资一些总是明智的。简洁不是软件的理想属性——简洁才是。