当前位置: 首页 > 知识库问答 >
问题:

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

云默
2023-03-14

我有一个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
,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

事先非常感谢。

共有1个答案

顾靖
2023-03-14
$ 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
 类似资料:
  • 场景A(硬代码)手工输入字符串项: 系统输出: 场景B(软代码)从数据库查询字符串项: 系统输出: 这打印到单行,这不是我想要的,我如何使这打印像场景a(每个项目的新行)

  • 我正在使用DocuSign java api创建信封,并将文档发送给多个签名者进行签名,它运行良好&所有签名者都可以成功地对文档进行签名。 如果我使用现有模板从DocuSign UI发送信封,那么其他操作中只有打印和签名选项 我想使用DocuSign Java Api启用打印和登录选项

  • 问题内容: 我在mySQL中有一个带有以下各列的表: TRANS_TYPE可以是“ DRINV”(销售)或“ DRCDT”(信用)。 我想获取每个客户的总销售额,因此到目前为止,我的查询是: 问题是这是销售 和 积分的总和,而不是销售减去积分。我希望结果是 是否可以在SQL查询中执行此操作? 问题答案:

  • 我想打印asterix,它等于行数-(它们应该从右侧开始)。它应该在第一行以9个空格和1个空格开始,然后在第二行以2个空格和8个空格开始,依此类推,直到第十行,第十行应该有10个空格和0个空格,如下图所示: 我可以在每行打印正确数量的空格,在正确的位置打印1*。例如,它在第一行打印9个空格和1个*。但在第二行,它会打印8个空格,在第九个位置打印1个*而不是2个?我看不到我在代码中遗漏了什么:

  • 我正在尝试打印在“show”void中的“getvalue”void中找到的值。我得到一个错误: 错误:“学生”未在此范围中声明 我正试图在另一个名为“show”的虚空中显示获得的值,但失败了。(必须在一个不同的虚空中的代码的一般结构必须是我的作业中另一个名为“show”的虚空)

  • 问题内容: 我知道这将在实际执行之前执行脚本打印每一行。如何使Perl和Python解释器执行相同的操作? 问题答案: Devel :: Trace是Perl的类似物,trace模块是Python的。