【问题标题】:Using awk or shell to total values in a delimited file使用 awk 或 shell 对分隔文件中的值进行总计
【发布时间】:2021-10-16 05:02:07
【问题描述】:

我有一个管道分隔文件,在某些字段中也有分隔值,我想获取第 37 个字段的总数并将其添加到每一行的末尾

示例文件如下所示 1|2|18|45324.56|John|Smith|...etc 然后第 37 个字段有 |1.99^2.46^79.87|next data field here|etc

我想将数字 1.99、2.46、79.87 加在一起,并添加到文件末尾

1|2|18|45324.56|John|Smith|...等然后第 37 个字段有 |1.99^2.46^79.87|next data field here|84.32

显然我可以做 awk 'F'|' '{print $37}' 文件,它会显示 1.99^2.46^79.87 但我不确定如何合计这些值,因为它基本上是不同分隔数据内的分隔数据

这里编辑的是全行数据

1|12|15|29786.31|test|true|2019-12-01|2021-02-28||2019-12-01|2021-02-28|1417.00|t0000000|约翰|史密斯|当前| 1234 Main St|Dallas|TX|75000|Office|8709999999|||||||附件^附件|t0000000_4042 - 申请文件.pdf^t0000000_4042 - 租赁协议.pdf|704405808^704405809^704^704405809^704^704405809^704^704405809^704^704405809^704^704405809^704405810^7045239704^359333 ^704523594|2021-03-01^2021-03-01^2021-03-01^2021-02-28^2021-02-28^2021-03-06^2021-03-06|RUBS收入水/下水道^RUBS收入水/下水道^公用事业双 填充收入^损坏/清洁费^损坏/清洁费^RUBS收入水/下水道^RUBS收入水/下水道|收费^收费^收费^收费^收费^收费^收费|18.25^15.26^2.99^40.00^25.00^18.88 ^15.78|18.25^15.26^2.99^40.00^25.00^18.88^15.78|费用代码^费用代码描述^交易记录^费用代码^费用代码描述^交易 操作说明^收费代码^收费代码描述^交易票据^收费代码^收费代码描述^交易票据^收费代码^收费代码描述^交易票据^收费代码^收费代码描述^交易票据^收费代码^收费代码描述^交易记录

【问题讨论】:

  • 请参阅stackoverflow.com/help/formatting 了解如何格式化您的输入、输出和代码,并参阅stackoverflow.com/help/someone-answers 了解如何处理您之前的问题(如果/当您得到答案时)。确保创建并发布minimal reproducible example,但不要发布几个字段然后谈论第 37 个字段等 - 使用 2 或 3 行 4 或 5 个字段的输入,并围绕 那个.
  • 我想将数字 1.99, 2.46, 79.87 加在一起并添加到文件末尾 文件末尾(这些行之后的新行中所有行的总数) 还是行尾(为每一行添加带有总和的新列)?

标签: file awk sum numbers append


【解决方案1】:

awk 有一个函数split 可以在某个分隔符上分割一个字段:

awk -F\| '
    split($37, a, "^")             # split on caret, store in a
    s = 0; for (i in a) s += a[i]  # sum values
    print $0 "|" s                 # append new column and output
' sample_file

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多