ループ構造を使用してデータファイルを処理するスクリプトを作成するには?

ループ構造を使用してデータファイルを処理するスクリプトを作成するには?

次のデータを含む入力ファイルがあります。

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

データファイルを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   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入力を月ごとに並べ替えます。まったく奇妙ではありませんが、はるかに簡単です。

関連情報