awk 명령을 사용하여 각 행의 값을 계산하는 방법

awk 명령을 사용하여 각 행의 값을 계산하는 방법

급여 서류가 있어요

급여 문서

awk 명령을 사용하여 라인 -10의 각 값에서 각 행의 값을 계산하는 데 도움을 줄 수 있습니까? 결과

이 명령을 사용하면 첫 번째 행만 계산할 수 있습니다.

awk '{sum += $3*7} END {print sum}' RS= payroll.txt

답변1

하다:

awk '{for (i=2;i<=NF;i++) sum[$1]+=$i-10} END{for (i in sum) \
          print i, "Total =", sum[i]}' file.txt
  • {for (i=2;i<=NF;i++) sum[$1]+=$i-10}필드 add를 반복하면 sum첫 번째 필드가 키이고 필드 값에서 10을 뺀 값이 있는 배열이 생성됩니다.

  • END{for (i in sum) print i, "Total =", sum[i]}, 원하는 출력 형식으로 배열의 키와 값을 인쇄합니다.

예:

% cat file.txt
employee1 75 75 75 75 75 75 75
employee2 80 80 80 80 80 80 80
employee3 50 50 50 50 50 50 50

% awk '{for (i=2;i<=NF;i++) sum[$1]+=$i-10} END{for (i in sum) print i, "Total =", sum[i]}' file.txt
employee1 Total = 455
employee2 Total = 490
employee3 Total = 280

답변2

awk가 있는 대부분의 시스템에는 Perl도 있는데, 이는 많이 겹치지만 이 상황을 더 편리하게 처리합니다. 당신이 그것을 가지고 있고 직원 당 하나의 라인만 가지고 있다면,

perl -nae '$e=shift @F; $t+=$_-10 for @F; print $e." Total= ".$t.$/' inputfile

직원이 여러 행을 가지고 있거나 가질 수 있고 @heemayl이 올바른 경우 이를 각 직원의 단일 합계에 추가하려고 합니다.

perl -nae '$e=shift @F; $t{$e}+=$_-10 for @F;}{print $_." Total= ".$t{$_}.$/ for keys %t' inputfile

관련 정보