awk - 比较两个文件中的第一列,如果匹配:更新最后一列变量,否则:将行附加到第二个文件
问题描述
我想取 file1 的 col1,如果 file2 的 col1 匹配,则更新最后一列中的“更新日期”。如果没有匹配项,我想将 file1 的整行附加到 file2 并将“更新日期”值也附加到该行。
我目前正在使用awk 'NR==FNR{c[$1]++;next};c[$1] > 0' file2 file1
基线比较,但是如果存在匹配,则会错误地打印整行,而且我也无法弄清楚如何添加另一个条件来更新日期列。我也在尝试在 shell 脚本中执行此操作。
文件 1
userName | cpu% | command | date created
user1, 101.6, plasma-de+, Thu Aug 8 09:30:17 MDT 2019
user2, 100.0, plasma-de+, Thu Aug 8 09:30:17 MDT 2019
user3, 102.0, plasma-de+, Thu Aug 8 09:30:17 MDT 2019
文件 2
userName | cpu% | command | date created | date updated
user1, 101.6, plasma-de+, Mon Aug 5 06:35:39 MDT 2019, Mon Aug 5 06:35:39 MDT 2019
user2, 100.0, plasma-de+, Mon Aug 5 06:35:39 MDT 2019, Mon Aug 5 06:35:39 MDT 2019
运行命令后的文件 2
userName | cpu% | command | date created | date updated
user1, 101.6, plasma-de+, Mon Aug 5 06:35:39 MDT 2019, Thu Aug 8 09:30:17 MDT 2019
user2, 100.0, plasma-de+, Mon Aug 5 06:35:39 MDT 2019, Thu Aug 8 09:30:17 MDT 2019
user3, 102.0, plasma-de+, Thu Aug 8 09:30:17 MDT 2019, Thu Aug 8 09:30:17 MDT 2019
解决方案
一种假定您的文件已排序的非 awk 方式:
$ (join -t, -j1 -o 0,2.2,2.3,2.4,1.4 file1 file2; \
join -t, -j1 -v1 -o 0,1.2,1.3,1.4,1.4 file1 file2)
user1, 101.6, plasma-de+, Mon Aug 5 06:35:39 MDT 2019, Thu Aug 8 09:30:17 MDT 2019
user2, 100.0, plasma-de+, Mon Aug 5 06:35:39 MDT 2019, Thu Aug 8 09:30:17 MDT 2019
user3, 102.0, plasma-de+, Thu Aug 8 09:30:17 MDT 2019, Thu Aug 8 09:30:17 MDT 2019
或在没有该限制的情况下使用 awk:
$awk 'BEGIN { FS = OFS = "," }
NR == FNR { a[$1] = $0; b[$1] = $4; next }
$1 in a { $5 = b[$1]; delete a[$1]; print }
END { for (u in a) print a[u], b[u] }' file1 file2
user1, 101.6, plasma-de+, Mon Aug 5 06:35:39 MDT 2019, Thu Aug 8 09:30:17 MDT 2019
user2, 100.0, plasma-de+, Mon Aug 5 06:35:39 MDT 2019, Thu Aug 8 09:30:17 MDT 2019
user3, 102.0, plasma-de+, Thu Aug 8 09:30:17 MDT 2019, Thu Aug 8 09:30:17 MDT 2019
推荐阅读
- bots - slack 机器人可以使用 slack-api 作为管理员或完全权限用户,使用 slack 作为访客吗?
- kubernetes - minikube 以及如何调试 api 服务器错误
- javascript - 为什么当我在获取输入类型的函数中输入 {} 时我得到未定义
- javascript - 如何用透明背景为本地图标图像着色?
- reactjs - 如何为提供者使用具有多个值的 React Hooks 上下文
- python - 在 Kivy 中使用 jsonstore
- python - 错误 ------ 解析时出现意外的 EOF
- google-api - 找不到 Adwords api v201809
- javascript - NoReverseMatch at /blah/blah/add 虽然我认为我的模板 if/else/endif 可以解决错误
- aws-lambda - sam 模板中可能的策略的完整列表