行の特定の値を合計しますが、そのフィールドのいずれかが空の場合、合計は印刷されません。

行の特定の値を合計しますが、そのフィールドのいずれかが空の場合、合計は印刷されません。

3つの列(区切り記号はカンマ)で構成されるファイルがあります。最初の列にはIDが含まれ、2番目と3番目の列には合計したい値が含まれています。合計は、出力のファイルに4番目の列として追加する必要があります。

ただし、場合によっては、3番目の列が空になることがあります(入力ファイルの2行目など)。この場合、合計に関連する列は空でなければなりません。ただし、フィールドが明示的に表示されている場合は、0合計は通常どおりに計算する必要があります(たとえば、入力ファイルの4行目)。

  • 入力.txt
    2309,-0.3,0.2
    2311,1.2,
    2312,0,-1
    2315,2.2,0
    
  • 希望の出力:
    2309,-0.3,0.2,-0.1
    2311,1.2,,
    2312,0,-1,-1
    2315,2.2,0,2.2
    

以前は同様の議論を見たことがありますが、2番目と3番目の列の間で合計を計算する必要があることを指定する方法と、3番目の列が空の行の合計をスキップする方法を知りません。以下のスクリプトは、同じ行(またID??)に含まれるすべての値を合計するようになっていますが、どういうわけか変更できますか?それとも他のより速い方法を提案してもらえますか?

NF++; $NF=sum
awk -v OFS=, -F, 'NR>1{sum=0; for(i=1; i<=NF; i++) sum += $i; NF++; $NF=sum } 1'

ベストアンサー1

$ awk 'BEGIN{FS=OFS=","} {print $0, ($3=="" ? "" : $2+$3)}' input.txt
2309,-0.3,0.2,-0.1
2311,1.2,,
2312,0,-1,-1
2315,2.2,0,2.2

おすすめ記事