루프를 사용하여 아래 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
이제 저는 다른 일을 하고 싶습니다. 예를 들어, 두 번째 열의 합계를 계산하고 첫 번째 열의 숫자가 같으면 다시 시작하고 싶습니다. saw[$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