루프 구조를 사용하여 데이터 파일을 처리하는 스크립트를 작성하는 방법은 무엇입니까?

루프 구조를 사용하여 데이터 파일을 처리하는 스크립트를 작성하는 방법은 무엇입니까?

다음 데이터가 포함된 입력 파일이 있습니다.

November 400
January 200
June 400
March 200
April 200
May 300
July 400
August 300
September 400
February 300
October 300
December 200

데이터 파일을 한 줄씩 처리한 다음 이를 출력 파일로 보내면 다음과 같은 결과가 나오는 루프 구조를 만들어야 합니다.

Month     Sales
-----     -----
January   200
February  300
March     200
April     200
May       300
June      400
July      400
August    300
September 400
October   300
November  400
December  200

Total   show the total

Average show the average

데이터를 가져오고 올바르게 출력하는 데 문제가 있습니다. 구문을 정리하기 위해 쉘 검사를 사용해 보았지만 문제가 발생했습니다. 코드는 다음과 같습니다.

#!bin/bash
awk >>practicefile.output

    BEGIN{
    print "Month\tSales"
    print "-----\t-----"
{ Month[$1] = $2; next }
{ lines[(Month[$1])] = $1 (Month[$1]) $2 }
END {
    for (i=1; i<=7; i++) {
        if (lines[sales[i]])
            print lines[month[i]]
        else
            print month, sales[i]
        fi
            }
    }

답변1

원하는 출력을 얻었습니다

Month     Sales
-----     -----
January   200
February  300
March     200
April     200
May       300
June      400
July      400
August    300
September 400
October   300
November  400
December  200

Total   3600

Average 300

다음 스크립트를 사용하십시오(다른 이름으로 저장 test.awk).

BEGIN {
    print "Month     Sales"
    print "-----     -----"
}

{ printf "%-9s %s\n", $1, $2 }
{ sum += $2 }

END {
    printf "\nTotal   %s\n", sum
    printf "\nAverage %s\n", sum / NR
}

그리고 그것을 그렇게 부르세요 sort -k1,1M input.txt | awk -f test.awk.

설명: printf "%-9s", $1문자열( )에 $1최대 9자의 패딩(공백 포함)을 추가합니다 . sort -k1,1M입력을 월별로 정렬합니다. 전혀 이상하지는 않지만 훨씬 간단합니다.

관련 정보