행 읽기 및 삭제

행 읽기 및 삭제

해결해야 할 문제에 대한 질문이 있는데 내 대사는 다음과 같습니다.

입력하다

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
$

관련 정보