아래 txt 파일에서 다음을 사용하여 전체 열 합계를 반복할 수 있습니다.
101 10
101 10
101 10.10
101 13
101 10
101 10
102 10.140
102 10
102 10
102 0.90
102 10
103 10
104 10
111 11
111 11
111 5.485e+12
111 11
awk '{sum+=$2;} END{print sum;}' file1.txt > sum_a.txt
이제 저는 뭔가 다른 일을 하고 싶습니다. 예를 들어, 첫 번째 열 번호가 동일할 때까지 두 번째 열을 합산하고 다시 시작하고 싶습니다. seen[$1]을 사용하여 수행할 수 있나요?
awk '{ seen[$1] += $2 } END { for (i in seen) print i, seen[i] }' file1.txt
여기서 $1은 인덱스 값으로 처리됩니다.
을 사용하여 실행할 수 없었습니다 seen[$1]
. 아니면 루핑을 수행하는 다른 좋은 방법이 있나요?
결과는 다음과 같습니다.
101 63.10
101 63.10
101 63.10
101 63.10
101 63.10
101 63.10
102 40. 90
등등... 전체 열까지.
답변1
$ awk 'NR==FNR{sum[$1]+=$2; next} {print $1, sum[$1]}' file file
101 63.1
101 63.1
101 63.1
101 63.1
101 63.1
101 63.1
102 41.04
102 41.04
102 41.04
102 41.04
102 41.04
103 10
104 10
111 5485000000033
111 5485000000033
111 5485000000033
111 5485000000033
답변2
awk를 사용하여 하나의 입력 파일만 사용하려는 경우:
$ awk -v c=1 '{ a[$1]+=$2;b[c]=$1;c+=1} END { for( i=1;i<=NR;i++ ){key=b[i]; print key" "a[key]} }' file1.txt
101 63.1
101 63.1
101 63.1
101 63.1
101 63.1
101 63.1
102 41.04
102 41.04
102 41.04
102 41.04
102 41.04
103 10
104 10
111 5485000000033
111 5485000000033
111 5485000000033
111 5485000000033