![比较文件中的基因列并输出 Linux 中存在的基因和列数](https://linux22.com/image/125546/%E6%AF%94%E8%BE%83%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E5%9F%BA%E5%9B%A0%E5%88%97%E5%B9%B6%E8%BE%93%E5%87%BA%20Linux%20%E4%B8%AD%E5%AD%98%E5%9C%A8%E7%9A%84%E5%9F%BA%E5%9B%A0%E5%92%8C%E5%88%97%E6%95%B0.png)
我在这样的文件中有 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