R Bash—一行程序,对qvalue列上的bed文件进行排序,然后提取q值最高的行的前20%
我有以下格式的bed文件:R Bash—一行程序,对qvalue列上的bed文件进行排序,然后提取q值最高的行的前20%,r,bash,sorting,filtering,percentage,R,Bash,Sorting,Filtering,Percentage,我有以下格式的bed文件: 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 如果可能的话,我需要
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-one行程序在q-value列(第4列)上对这个文件进行排序,然后我需要提取q-value最高的前20%行
排序后,这将看起来像:
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
chr1 10004 10467 310.43 peak_1
在百分比之后,它看起来像:
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
chr1 10004 10467 310.43 peak_1
我需要在40多个文件上运行这个
我也很熟悉R,所以如果这在bash中不可能,但在R中是可行的,那么R代码也会很有用(但bash更可取)
非常感谢
编辑评论: 使代码更易于测试 回复:我自己的尝试 当我试图在第一个实例中运行
sort-k4 file.txt
时。我得到了以下不是我想要的:
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
这让我很困惑,我想小数是一个问题,不知道如何绕过第一部分。这就是你所看到的吗
#!/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
#/垃圾箱/垃圾箱
sort-r-g-k4,4tempfile\u sorted.out
lncnt=$(wc-l$new\u fn
您做了哪些努力?你能发布一个更可测试的输入吗?我们无法想象第9列中的数据您的尝试是什么?请查看sort
。可能类似于排序-nk10
。然后导入head
并告诉我们它是如何进行的。@Darren,请在您的帖子中也添加预期的输出以及代码标签。wc-l
可以用来计算行数,百分比可以通过本机计算,因为在这种情况下,浮点运算没有任何好处。