打印awk中每列的行数和其他行值



我有一个csv文件,结构如下:

|  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

我必须使用awk脚本打印单个计算机部件的价格总和(第3行至第6行(与组装的计算机价格(第7行(之间的比较,并显示每个品牌来自的国家。终端中的打印结果应该类似于:

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

其中第三列是CPU、GPU、HDD和RAM价格的总和,第四列是第7行中每个计算机品牌的价格相同值。

到目前为止,我已经能够对下面的post I链接中提供的转换解决方案的各个列进行汇总,但我不知道如何以所需的格式显示我想要的结果。有人能帮我吗?在这一点上我有点绝望。

对每列bash 中的所有值求和

这是此消息顶部表示的原始csv文件的内容:

,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

事先非常感谢。

$ 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

最新更新