如何使用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

相關內容