python - 如何合并行和添加列值?

标签 python linux bash unix awk

所以我有一个像这样的 laaaaaaaarge 文件:

Item|Cost1|Cost2
Pizza|50|25
Sugar|100|100
Spices|100|200
Pizza|100|25
Sugar|200|100
Pizza|50|100

我想为特定项目添加所有 Cost1Cost2 并生成合并输出。

我已经编写了一个 python 代码来执行此操作,

item_dict = {}
for line in file:
    fields = line.split('|')
    item = fields[0]
    cost1 = fields[1]
    cost2 = fields[2]
    if item_dict.has_key(item):
        item_dict[item][0] += int(cost1)
        item_dict[item][1] += int(cost2)
    else:
        item_dict[item] = [int(cost1),int(cost2)]

for key, val in item_dict.items():
    print key,"|".join(val)

有没有办法在 awk 或使用任何其他魔法中非常有效和快速地做到这一点?

或者我可以让我的 python 更优雅、更快吗?

预期输出

Pizza|200|150
Sugar|300|200
Spices|100|200

最佳答案

像这样的……

$ awk 'BEGIN{OFS=FS="|"}
  NR>1 {cost1[$1]+=$2; cost2[$1]+=$3} 
  END{ for (i in cost1) print i, cost1[i], cost2[i]}' file
Sugar|300|200
Spices|100|200
Pizza|200|150

说明

  • BEGIN{OFS=FS="|"} 将(输入和输出)字段分隔符设置为 |
  • NR>1 表示我们将对大于 1 的行号执行一些操作。这样我们就可以跳过标题。
  • cost1cost2 是数组,其索引是第一个字段,其值是到该点的总和。
  • END {} 是我们在读取整个文件后所做的事情。它包括遍历数组并打印值。

关于python - 如何合并行和添加列值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19097834/

相关文章:

python - python -m unittest 执行什么功能?

linux - 在linux中如何在用户模式下运行一段代码而不被抢占

python - 在用户接受的 python 中验证 `su` 密码

python - Selenium Webdriver for Python : get page, 输入值,点击提交,获取源代码

用于 Raspberry Pi 上 JSON 服务器的 Python 库

c++ - 如何在excel中使用标准输入 '<'?

bash - TAR 无法与 crontab 一起正常工作

linux - 操作系统检测中的语法问题

python - python glob中的大括号扩展

python - cx_freeze错误: Module not found tkinter