我有一个结构如下的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行中看到的价格相同的值。
到目前为止,我已经能够汇总用于转换下面我链接的文章中提供的解决方案的各个列,但是我不知道如何以所需的格式显示想要的结果。有人可以帮我吗?此时我有点绝望。
Sum all values in each column 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