Como escrever um script que usará uma estrutura de loop para processar o arquivo de dados?

0

Eu tenho um arquivo de entrada com os seguintes dados:

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

Eu tenho que fazer uma estrutura de loop que irá processar o arquivo de dados linha por linha, em seguida, enviá-lo para um arquivo de saída, resultando nesta saída

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

Estou tendo problemas para obter os dados e exibi-los corretamente. Eu tentei usar o shell check para limpar a sintaxe, mas estou tendo problemas. Aqui está o código.

#!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
            }
    }
    
por Mister123 29.11.2015 / 20:02

1 resposta

1

Eu tenho a saída desejada

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

usando o seguinte script (salvo como 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
}

e chamando-o como sort -k1,1M input.txt | awk -f test.awk .

Explicação: printf "%-9s", $1 adiciona preenchimento (com espaços) até 9 caracteres à string ( $1 ). sort -k1,1M classifica a entrada por mês. Não inteiramente awk, mas muito mais fácil.

    
por 29.11.2015 / 21:26