Marta_95
Marta_95

Reputation: 3

Print sum of rows and other row value for each column in awk

I have a csv file structured as the one below:

             |  Taiwan  |       |   US      |   
             |  ASUS    |   MSI |   DELL    |   HP
            ------------------------------------------
    CPU      |  50      |   49  |   43      |   65
    GPU      |  60      |   64  |   75      |   54
    HDD      |  75      |   70  |   65      |   46
    RAM      |  60      |   79  |   64      |   63
    assembled|  235     |   244 |   254     |   269

and I have to use an awk script to print a comparison between the sum of prices of the individual computer pieces (rows 3 to 6) "versus" the assembled computer price (row 7) displaying also the country each brand comes from. The printed result in the terminal should be something like:

Taiwan      Asus    245     235
Taiwan      MSI     262     244
US          DELL    247     254
US          HP      228     269

Where the third column is the sum of CPU, GPU, HDD and RAM prices and the fourth column is the price same value seen in row 7 per each computer brand.

So far I have been able to sum the individual columns transforming the solution provided at the post I link below, but I don´t know how I could display the result I want in the desired format. Could anyone help me with this? I´m a bit desperate at this point.

Sum all values in each column bash

This is the content of the original csv file represented at the top of this message:

,Taiwan,,US,
,ASUS,MSI,DELL,HP
CPU,50,49,43,65
GPU,60,64,75,54
HDD,75,70,65,46
RAM,60,79,64,63
assembled,235,244,254,269

Thank you very much in advance.

Upvotes: 0

Views: 100

Answers (1)

Ed Morton
Ed Morton

Reputation: 203684

$ cat tst.awk
BEGIN { FS=","; OFS="\t" }
NR == 2 {
    for (i=2; i<=NF; i++) {
        corp[i] = (p[i] == "" ? p[i-1] : p[i]) OFS $i
    }
}
NR > 2 {
    for (i=2; i<=NF; i++) {
        tot[i] += p[i]
    }
}
{ split($0,p) }
END {
    for (i=2; i<=NF; i++) {
        print corp[i], tot[i], p[i]
    }
}

.

$ awk -f tst.awk file
Taiwan  ASUS    245     235
Taiwan  MSI     262     244
US      DELL    247     254
US      HP      228     269

Upvotes: 2

Related Questions