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