해결해야 할 문제에 대한 질문이 있는데 내 대사는 다음과 같습니다.
입력하다
GTEX-1117F-0003-SM-58Q7G
GTEX-1117F-0003-SM-5DWSB
GTEX-111CU-0826-SM-5EGIJ
GTEX-111CU-0926-SM-5EGIK
GTEX-ZZPU-2726-SM-5NQ8O
GTEX-ZZPU-2626-SM-5E45Y
K-562-SM-2AXVE
K-562-SM-26GMQ
GTEX-1117F
첫 글자가 "patient"(예 : GTEX-111CU
, GTEX-ZZPU
및 ) 임을 알려주는 또 다른 문서가 있습니다 K-562
.
어떤 환자가 가장 많은 샘플을 가지고 있는지 확인하려면 고유 코드가 필요합니까?
따라서 "환자"의 샘플 수를 알아야 합니다. GTEX-1117F
이 경우에는 2개가 있습니다.
출력이 필요함
GTEX-1117F 2
GTEX-111CU 2
GTEX-ZZPU 2
K-562 2
그러면 더 많은 샘플을 통해 (예를 들어) "환자"를 이해해야 합니다 K-562 140
.
답변1
이를 사용하여 cut
각 줄에서 대시로 구분된 처음 두 개의 필드를 추출하고, 결과를 정렬하고, 각 고유 문자열의 발생 횟수를 계산할 수 있습니다.
$ cut -d '-' -f 1,2 file | sort | uniq -c | sort -n | head
2 GTEX-1117F
2 GTEX-111CU
2 GTEX-ZZPU
2 K-562
또한 데이터를 전달하여 sort -n
숫자를 정렬하고 head
최상의 결과를 얻는 데 사용합니다.
답변2
awk를 호출하고 정렬 지연을 방지하려면 다음을 사용할 수 있습니다.
awk -F- '{c[$1"-"$2]++}END{for (i in c){print i,c[i]}}' file
답변3
계산이 더 명확해지도록 다른 예를 들어 보겠습니다.
GTEX-1117F-0003-SM-58Q7G
GTEX-1117F-0003-SM-58Q7G
GTEX-1117F-0003-SM-5DWSB
GTEX-111CU-0826-SM-5EGIJ
GTEX-111CU-0926-SM-5EGIK
GTEX-ZZPU-2726-SM-5NQ8O
GTEX-ZZPU-2626-SM-5E45Y
K-562-SM-2AXVE
이 명령은 환자 ID의 형식이 다음과 같다고 가정합니다 string-string
.
$ cut -d'-' -f1,2 file | uniq -c | awk -F' ' '{ print $2,$1}' | sort -rk2 | head -1
GTEX-1117F 3
답변4
부터 시작하면 어떨까요?
$ for F in `cat patients`; do echo -n "$F " ; grep "^$F" records | wc -l; done
GTEX-1117F 2
GTEX-111CU 2
GTEX-ZZPU 2
K-562 2
$