首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在qvalue列上排序床文件,然后提取Q值最高的20%的行。

在qvalue列上排序床文件,然后提取Q值最高的20%的行。
EN

Stack Overflow用户
提问于 2018-05-23 11:26:39
回答 1查看 198关注 0票数 2

我有一张床文件,格式如下:

代码语言:javascript
复制
chr start   end q-value   name
chr1    10004  10467    310.43    peak_1
chr2    15410  15704    19.61 peak_2
chr3    21207  21354    4.04  peak_3
chr4    26073  26165    25.32 peak_4
chr5   63044057  63044425   39.65  peak_5

如果可能的话,我需要一个bash一行来对Q值列(第4列)上的文件进行排序,然后我需要提取Q值最高的前20%的行。

排序后,如下所示:

代码语言:javascript
复制
chr start   end q-value   name
chr1    10004  10467    310.43    peak_1
chr5   63044057  63044425   39.65  peak_5
chr4   26073  26165    25.32 peak_4
chr2    15410  15704    19.61 peak_2
chr3    21207  21354    4.04  peak_3

在百分比之后,它看起来是:

代码语言:javascript
复制
chr1    10004  10467    310.43    peak_1

我需要在40多个文件上运行这个。

我对R也很熟悉,所以如果在bash中这是不可能的,但在R中是可行的,那么R代码也是有用的(但是Bash更好)。

非常感谢。

编辑评论:

使代码更易于测试。

Re:我自己的尝试

当我第一次尝试运行sort -k4 file.txt时。我得到的不是我想要的:

代码语言:javascript
复制
chr2    15410  15704    19.61 peak_2
chr4    26073  26165    25.32 peak_4
chr1    10004  10467    310.43    peak_1
chr5   63044057  63044425   39.65  peak_5
chr3    21207  21354    4.04  peak_3

这让我感到困惑,我猜想小数引起了一个问题,并且不知道如何绕开第一部分。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-23 12:14:21

这就是你要看的吗?

代码语言:javascript
复制
#!/bin/sh
sort -r -g -k 4,4 < inputFile.file > tempfile_sorted.out
lncnt=$(wc -l < tempfile_sorted.out)
percent_linecount_infloat=$(echo "$lncnt*.2" | bc)
float2Int=$(printf %.0f "$percent_linecount_infloat")
head_20_percent=$(head -"$float2Int" tempfile_sorted.out)
new_fn=$(printf "%s_20" tempfile_sorted.out) # new file with top 20% of sorted output
printf "$head_20_percent" > $new_fn
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50487211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档