파일의 고유 줄 수를 얻는 방법은 무엇입니까?

파일의 고유 줄 수를 얻는 방법은 무엇입니까?

열 1에는 식별자 목록이 있고 열 2에는 해당 개수가 있습니다. 파일은 다음과 같습니다.

KDO65387         65
KDO65387         27
XP_006465447     971
XP_006482015     1207
XP_003630414     194
XP_002513282     500
XP_003630414     23

내가 원하는 것은 1열의 값이 연속된 행에서 일치하는 경우 2열의 값을 합산하는 것입니다. 출력은 다음과 같습니다.

KDO65387    92
XP_006465447    971
XP_006482015    1207
XP_003630414    217
XP_002513282    500

답변1

순서가 중요한 경우:

awk '!($1 in sum) {f[n++] = $1}
     {sum[$1] += $2}
     END {for (i = 0; i < n; i++) print f[i], sum[f[i]]}' < file

그렇지 않은 경우 다음과 같이 단순화할 수 있습니다.

awk '{sum[$1] += $2}
     END {for (f in sum) print f, sum[f]}' < file

답변2

사용 datamash:

datamash groupby 1 sum 2 <infile.txt

답변3

perl -lane '
   exists $h{$F[0]} or push @h, $F[0];
   $h{$F[0]} += $F[1];
   END { print "$_\t$h{$_}" for @h; }
' yourfile

위의 코드는 키 입력이 발생한 순서대로 인쇄합니다. 배열은 키의 순서를 유지하는 반면, 해시는 각 키에 해당하는 합계를 유지합니다.

관련 정보