이와 같은 파일에 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