awkを使用して他の列がnullかどうかに応じて列値を合計する

awkを使用して他の列がnullかどうかに応じて列値を合計する

私はもともとこの質問と回答に基づいていました(awk を使用した他の列の値に基づく列の値の合計)しかし、明らかに新しい質問をする必要があります。

複数の列を含むtsvファイルがあります。 2番目の列が空の場合は、列3の対応する値を合計したいと思います。列 2 が空でない場合 (内容が行ごとに異なる) 列 3 を作成したいと思います。例:

ColumnA ColumnB ColumnC
One              10
Little  STH      15
Red     XIV      55
Car              20

出力は次のとおりです。30と70は可能ですか?空いているときに計算するものと空でないときに計算するものを区別できますか?

助けてくれてありがとう、ベン

編集:以前にイメージとして配置したテーブルを置き換えるために別のテーブルを作成しました。 ここに画像の説明を入力してください。

答え1

満たす条件でインデックス付きの awk 配列を使用して、配列内のすべての値を印刷できます。たとえば、次のようになります。

awk 'BEGIN {FS = "\t"}; NR>1 {sum[$2!=""] += $3}; END{for (i in sum) print i, sum[i]}' test.tsv 

配列には、条件を満たさない値の合計または条件を満たす値の合計という2sumつの値が含まれます。sum[false]sum[0]sum[true]sum[1]

例を使って出力します。

0 30
1 70

答え2

それはまるで

awk 'BEGIN { FS=OFS="\t" }
     NR > 1 && $2 == "" { empty += $3 }
     NR > 1 && $2 != "" { full += $3 }
     END { print "Empty", empty; print "Text", full }' input.tsv

関連情報