删除其中 5 列或更多列的值小于 3 的行

删除其中 5 列或更多列的值小于 3 的行

我有一个来自 featureCounts 的 RNAseq 数据集,我已将其合并。我有 3 个条件和 3 个重复。我想删除其中 5 列或更多列的基因表达值小于 3 的行

这是我的数据集的示例。

Gene_id. M1 M2 M3 W1 W2 W3 S1 S2 S3
ENSMUSG00000102693 18 4 5 8 0 2 1 0 0
ENSMUSG00000064842 1 0 0 0 0 0 1 1 2
ENSMUSG00000051951 25 23 32 54 78 77 48 56 33
ENSMUSG00000102851 0 0 0 0 0 0 0 0 0
ENSMUSG00000103377 0 10 0 2 5 0 6 7 8

我想导入这个数据集,以便在另一个分析工具中进行进一步的DE分析。

答案1

据我了解你的问题,你想要

awk '{
        count=0
        for (i=2; i<=NF; i++) if ($i < 3) count++
        if (count < 5) print
     }'

对于每一行,将计数器设置为零。然后查看除第一个字段(基因 ID)之外的每个字段(列),如果小于 3,则对其进行计数。然后,如果计数小于五,则打印该行。如果五列或更多列的值小于 3,则跳过该行(即删除它)。

如果您需要将其折叠成一行,则必须;在语句后面添加分号 ( )(即上面版本中换行符所在的位置):

awk '{ count=0; for (i=2; i<=NF; i++) if ($i < 3) count++; if (count < 5) print; }'

相关内容