다음과 같은 데이터 세트 탭이 있습니다.
A B C D
1 aaa 1 2
1 aaa 3 4
1 aaa 5 6
1 bbb 7 8
1 ccc 9 1
1 ccc 2 3
1 ddd 4 5
1 ddd 6 7
1 ddd 8 9
1 ddd 1 2
그룹 B의 C 합계를 표시하기 위해 새 열 E를 추가하고 싶습니다.
원하는 출력:
A B C D E
1 aaa 1 2 9
1 aaa 3 4 9
1 aaa 5 6 9
1 ddd 4 5 19
1 ddd 6 7 19
1 ddd 8 9 19
1 ddd 1 2 19
답변1
awk 'BEGIN{ FS=OFS="\t" }
NR==FNR{
if (FNR>1) a[$2]+=$3
next
}
{ $(NF+1)=(FNR==1 ? "E" : a[$2]) }
1
' file file
입력 파일을 두 번 읽습니다. 첫 번째 실행에서는 헤더 행( if (FNR>1)...
)을 건너뛰고 field 값이 key 가 있는 배열 값에 추가됩니다 $3
. 계속 녹음하세요.a
$2
next
두 번째 실행에서는 첫 번째 행에 E
새 필드를 할당하거나 $(NF+1)
다른 행에 할당된 값을 할당합니다. a[$2]
기록을 인쇄합니다.
산출:
A B C D E
1 aaa 1 2 9
1 aaa 3 4 9
1 aaa 5 6 9
1 bbb 7 8 7
1 ccc 9 1 11
1 ccc 2 3 11
1 ddd 4 5 19
1 ddd 6 7 19
1 ddd 8 9 19
1 ddd 1 2 19