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}フィールドを反復処理して、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があり、従業員ごとに1行しかない場合は、

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

関連情報