20210904 更新,今天上午完成了开题,最近没睡好觉,躺在床上,不知怎么想起了这段代码,发现真的非常之愚蠢。
只需下面简简单单的代码就能得到结果
awk '{a=0;for(i=2;i<=NF;i++){if($i>0.5)a++};if(a>=2)print}' a.tsv
以下为原文章:
文献上的一个简单的数据过滤问题。
很蠢地解决了。 :D
# 任意$1个样本的表达量超过0.5视为表达
$ cat aaaa.sh
awk '{for(i=2;i<=NF;i++){if($i > 0.5)print}}' $2 | \
uniq -c | awk -vb=$1 '{if($1>=b)print}' | \
sed -e 's/^[[:space:]]*//g' -e 's/[[:space:]]/\t/g' | \
cut -f 2-
$ cat a.tsv
a 0.8 0.6 0.5 0 0.7
b 1 0 0.3 0 0.8
c 0.5 0 0 0.4 0.9
d 0 0.5 0 0.5 1
e 1 0 0.4 0 0.8
f 0.6 0 0 0.7 0
g 0.7 0 0.8 0 2
$ bash aaaa.sh 2 a.tsv
a 0.8 0.6 0.5 0 0.7
b 1 0 0.3 0 0.8
e 1 0 0.4 0 0.8
f 0.6 0 0 0.7 0
g 0.7 0 0.8 0 2
$ bash aaaa.sh 3 a.tsv
a 0.8 0.6 0.5 0 0.7
g 0.7 0 0.8 0 2
网友评论