동일한 식별자에서 정확한 수의 요소 추출

동일한 식별자에서 정확한 수의 요소 추출

다음과 같은 파일이 있습니다.

Id       Chr     Start   End    
Prom_1   chr1    3978952 3978953  
Prom_1   chr1    3979165 3979166  
Prom_1   chr1    3979192 3979193  
Prom_2   chr1    4379047 4379048  
Prom_2   chr1    4379091 4379092  
Prom_2   chr1    4379345 4379346  
Prom_2   chr1    4379621 4379622  
Prom_3   chr1    5184469 5184470  
Prom_3   chr1    5184495 5184496  

동일한 식별자가 몇 번이나 나타나는지 계산하고 싶습니다. 그것은 다음과 같습니다:

Prom_1  3  
Prom_2  4  
Prom_3  2  

어떤 아이디어라도 대단히 감사하겠습니다.

답변1

그리고GNU 데이터 혼합

$ datamash -W --header-in groupby 1 count 2 < file
Prom_1  3
Prom_2  4
Prom_3  2

답변2

다음을 사용하여 식별자를 계산할 수 있습니다 uniq.

tail -n +2 input | cut -d' ' -f1 | sort | uniq -c

정렬 된 uniq입력이 필요합니다. 이것을 사용하여 tail헤더를 건너뛰고 cut첫 번째 열을 "자르기"합니다.

출력 예:

  3 Prom_1
  4 Prom_2
  2 Prom_3

숫자가 더 작은 ID를 숫자가 더 큰 ID보다 먼저 인쇄해야 하는 경우(예: Prom_3before ) 다음으로 Prom_10바꿀 수 있습니다 (버전 순서 지정).sortsort -V

tail -n +2 input2 | cut -d' ' -f1 | sort -V | uniq -c

출력 예(input2에는 id에 대한 추가 행이 포함되어 있음 Prom_10):

  3 Prom_1
  4 Prom_2
  2 Prom_3
  1 Prom_10

답변3

awk를 사용할 수 있습니다.

awk 'NR>1 {a[$1]++} END { for (x in a) { print x,a[x] } } ' file

NR>1헤더
a[$1]++는 해시 반복자이므로 무시 합니다 .

답변4

user3589054와 비슷한 것:

ID가 많기 때문에 정렬할 때 동일한 순서의 ID를 얻을 수 없습니다. 예를 들어 Prom_1 Prom_10 등으로 시작하는 ID가 먼저 표시되기 때문입니다. 그래서 제가 한 일은 다음과 같습니다. 훌륭하게 작동합니다.

awk 'NR>1 {a[$1]++} END { for (x in a) { print x,a[x] } } ' file | awk -F "_" '{print $1"\t"$2"\t"}' | cut -f 2 | sort -n | awk -F " " '{print $1"\t"$2}' | sed 's/^/Prom_/' > file.output.txt

어디에:
awk 'NR>1 {a[$1]++} END { for (x in a) { print x,a[x] } } ' file |
ID와 숫자가 포함된 출력을 얻을 수 있지만 정렬되지는 않습니다.

awk -F "_" '{print $1"\t"$2"\t"}' | Prom, 번호, ID 번호 및 수량으로 파일을 분할합니다.

cut -f 2 | sort -n |
숫자 ID 및 해당 금액을 기준으로 정렬

awk -F " " '{print $1"\t"$2}' |
여기서 두 개의 열을 선택할 수 있습니다

sed 's/^/Prom_/'
마지막으로 번호 Id 앞에 Prom_을 추가합니다.

관련 정보