awk - 如何在awk中组合来自两个TXT文件的字段
问题描述
我有两个文本文件,内容如下:
总和.txt
|Name |Sum |
|User A |100.0 |
|User B |40.0 |
per_proj.txt
|Name |Project |Hours |
|User A |Project 1 |50.0 |
|User A |Project 2 |30.0 |
|User A |Project 3 |20.0 |
|User B |Project 1 |20.0 |
|User B |Project 2 |20.0 |
我想要实现的是合并这两个文件并获得如下输出:
|Sum | Project 1 | Project 2| Project 3|
|User A |100.0 |50.0 |30.0 |20.0 |
| Project 1 | Project 2|
|User B |100.0 |20.0 |20.0 |
有人可以分享他/她对此的了解吗?
我正在使用在这里找到的 awk 片段进行锻炼(从如何使用 AWK 合并两个文件开始?),但没有成功:(
解决方案
您真正需要的只是您的per_proj.txt
文件。即时计算总和(注意:特定于 GNU awk):
$ gawk 'BEGIN { FS = OFS = "|" }
NR > 1 { users[$2] += $4; projects[$3] = 1; projecttotals[$2, $3] += $4 }
END {
PROCINFO["sorted_in"] = "@ind_str_asc"
printf "| Name | Sum |"
for (p in projects) printf " %s |", p
printf "\n"
for (u in users) {
printf "| %s | %.1f |", u, users[u]
for (p in projects) printf " %.1f |", projecttotals[u, p]
printf "\n"
}
}' per_proj.txt
| Name | Sum | Project 1 | Project 2 | Project 3 |
| User A | 100.0 | 50.0 | 30.0 | 20.0 |
| User B | 40.0 | 20.0 | 20.0 | 0.0 |
您可能需要花点时间才能获得所需的确切输出格式,但这应该会给您这个想法。
推荐阅读
- mysql - MySql如何根据同一行中的主节点获取名称?
- python - 如何修复 tensorflow 中的“ValueError:空训练数据”错误
- javafx - 如何在 JavaFX 中的多个地方使用相同的组件?
- rust - 为什么我的 FFI 函数的第二次调用无法匹配字符串比较?
- firebase - Firestore 描述语言
- tensorflow - 2 个 IndexedSlices 不支持高效的 allreduce
- node.js - 我无法从 Watson Discovery 收到任何答复
- javascript - 有没有办法将 CSS 类应用于 Openlayers 5.3 功能?
- ios - 我可以将斜体和/或粗体文本上传到我的 firebase 数据库吗?
- google-apps-script - 在函数中实现 vlookup 和 match