我有一张床文件,格式如下:
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%的行。
排序后,如下所示:
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更好)。
非常感谢。
编辑评论:
使代码更易于测试。
Re:我自己的尝试
当我第一次尝试运行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这让我感到困惑,我猜想小数引起了一个问题,并且不知道如何绕开第一部分。
发布于 2018-05-23 12:14:21
这就是你要看的吗?
#!/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_fnhttps://stackoverflow.com/questions/50487211
复制相似问题