私はもともとこの質問と回答に基づいていました(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