특정 열에 다른 문자열이 나열되는 빈도

특정 열에 다른 문자열이 나열되는 빈도

4열에 특정 문자열이 몇 번 나타나는지 계산해야 합니다.

내 데이터는 다음과 같습니다.

25 48656721 48656734 FAM132B ENSCAFT00000019683 4 0.51 
X 53969937 53969950 FAM155B ENSCAFT00000026508 5 0.57 
3 42203721 42203906 FAM169B ENSCAFT00000017307 5 0.54 
36 28947780 28947831 FAM171B ENSCAFT00000046981 5 0.51 
10 45080519 45080773 FAM171B ENSCAFT00000003744 9 -0.53 
3 61627122 61627446 FAM193A ENSCAFT00000023571 13 0.64 
3 61626373 61626466 FAM193A ENSCAFT00000023571 6 0.51 
15 55348822 55349196 FAM193A ENSCAFT00000045012 5 0.52 

이것은 내 데이터의 일부입니다. 따라서 출력은 다음과 같습니다.

1 FAM132B
1 FAM155B
1 FAM169B
2 FAM171B
3 FAM193A

나머지 데이터에 대해서도 마찬가지입니다. 유효한 명령은 무엇입니까?

답변1

awk간단한 해결책은 열 4에서 풀을 사용하고 , 열 2(이전 열 4 데이터)를 기준으로 정렬하는 것입니다 uniq -c.sort

awk '{print $4}' < data | uniq -c | sort -k2

(업데이트된) 예제 입력에서는 다음을 제공합니다.

  1 FAM132B
  1 FAM155B
  1 FAM169B
  2 FAM171B
  3 FAM193A

답변2

사용 awk:

awk '{a[$4]++} END{for(s in a){print a[s]" "s}}' file
  • a[$4]++네 번째 열의 이름으로 배열 요소를 증분적으로 인덱싱합니다. 파일이 완료되면 배열에는 네 번째 열에 있는 모든 카운터 항목이 포함됩니다.
  • END{}: awk가 파일을 통과할 때 실행되는 코드 블록을 나타냅니다.
    • for(s in a)배열을 통해 이동 ...
    • print a[s]" "s}...그리고 그 값과 인덱스를 인쇄합니다.

산출:

1 FAM169B
3 FAM193A
1 FAM132B
1 FAM155B
2 FAM171B

답변3

구분 기호가 단일 공백이라고 가정합니다.

cut -d' ' -f4 infile | sort | uniq -c

uniq필터에 주의하세요가까운sort행과 일치하므로 먼저 다음 입력을 사용해야 합니다 .

FAM193A
FAM155B
FAM169B
FAM171B
FAM132B
FAM193A
FAM132A
FAM132B
FAM155B
FAM169B
FAM171B
FAM171A
FAM193A
FAM132A

다음을 사용하여 sort | uniq -c생산합니다.

  2 FAM132A
  2 FAM132B
  2 FAM155B
  2 FAM169B
  1 FAM171A
  2 FAM171B
  3 FAM193A

또한 uniq -c | sort -k2생산:

  1 FAM132A
  1 FAM132A
  1 FAM132B
  1 FAM132B
  1 FAM155B
  1 FAM155B
  1 FAM169B
  1 FAM169B
  1 FAM171A
  1 FAM171B
  1 FAM171B
  1 FAM193A
  1 FAM193A
  1 FAM193A

관련 정보