awk에서 숫자 목록의 누계를 생성하시겠습니까?

awk에서 숫자 목록의 누계를 생성하시겠습니까?

이렇게 숫자를 합산해야 해요

입력하다1 5 6 8 9 11

산출1 6 12 20 29 40

즉: 1 1+5 1+5+6 1+5+6+8 1+5+6+8+9 1+5+6+8+9+11

답변1

존재하다 awk:

{
    for (i = 1; i <= NF; ++i) {
        printf("%d ", s += $i);
    }
    printf("\n");
}

이 루프는 모든 입력 필드를 반복하고 s숫자의 누계를 인쇄합니다( ). 이 변수는 s첫 번째 반복에서 값이 0이 되므로 초기화할 필요가 없습니다. 할당 결과 s는 값이며 s, 이 값은 후행 공백 문자와 함께 인쇄됩니다.

예제 입력 사용:

$ echo "1 5 6 8 9 11" | awk -f script.awk
1 6 12 20 29 40

답변2

"dc" 계산기 명령을 사용하는 방법은 다음과 같습니다.

echo '1 5 6 8 9 11' |
dc -e "
[SM]sa               # macro a pushes TOS into stack M              
[dn32and]sp          # macro p prints current sum value
[z 1 <a SM z 0 <b]sb # macro b accumulates the main stack in stack M
[LM+lpx z lN !<c]sc  # macro c is while loop for showing running sum
? zsN lbx 0 lcx []p  # main() which brings together all macros
"

관련 정보