awk를 사용하여 다른 열이 null인지 여부에 따라 열 값 합계

awk를 사용하여 다른 열이 null인지 여부에 따라 열 값 합계

저는 원래 이 질문과 답변을 토대로 만들었습니다(awk를 사용하여 다른 열의 값을 기반으로 한 열의 값 합계) 하지만 분명히 새로운 질문을 해야 합니다.

여러 열이 포함된 tsv 파일이 있습니다. 두 번째 열이 비어 있으면 열 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 

배열 에는 조건을 충족하지 않는 값의 합계 또는 조건을 충족하는 값의 합계라는 두 sum가지 값이 포함됩니다 .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

관련 정보