다음과 같은 파일이 있습니다.
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_3
before ) 다음으로 Prom_10
바꿀 수 있습니다 (버전 순서 지정).sort
sort -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_을 추가합니다.