比较文件中的基因列并输出 Linux 中存在的基因和列数

比较文件中的基因列并输出 Linux 中存在的基因和列数

我在这样的文件中有 3 个基因组

col1    col2    col3
CXCL9   CXCL9   CXCL9
MAP2K6  MAP2K6  MAP2K6
CXCL10  CXCL10  CXCL11

我想匹配 3 列,看看有多少列中存在哪个基因,所需的输出格式为

CXCL9 3
MAP2K6 3
CXCL10 2
CXCL11 1

有人可以帮助我吗,这会节省我很多时间

答案1

sed+sort+uniq解决方案:

sed 's/[[:space:]]\+/\n/g' file | sort | uniq -c

输出:

  2 CXCL10
  1 CXCL11
  3 CXCL9
  3 MAP2K6

答案2

如果基因名称之间没有空格,并且列名称遵循您给出的模式,那么您可以使用以下脚本作为提示:

#!/bin/bash
for i in `cat genes.txt`; do
    [[ $i == "col"* ]] || echo $i;
done | sort | uniq -c

答案3

Awk解决方案:

awk '{ for(i=1;i<=NF;i++) a[$i]++ }END{ for(i in a) print i, a[i] }' file

输出:

CXCL11 1
MAP2K6 3
CXCL9 3
CXCL10 2

相关内容