我在这样的文件中有 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