unix - 在 awk 中针对一条记录累积多个值
问题描述
我有文件
1|dev|Smith|78|minus
1|ana|jhon|23|plus
1|ana|peter|22|plus
2|dev|dash|45|minus
2|dev||44|plus
我希望输出为,针对第 1 列和第 2 列的 uniq 值打印第 3 列和第 5 列的多个值
1|dev|Smith|minus
1|ana|jhon;peter|plus;plus
2|dev|dash;|minus;plus
我可以为一列将多条记录累积到 1 中,我想在一个命令中为 2 列执行此操作
awk -F"|" '{if(a[$1"|"$2])a[$1"|"$2]=a[$1"|"$2]";"$5; else
a[$1"|"$2]=$5;}END{for (i in a)print i, a[i];}' OFS="|" input.txt > output.txt
它给出的输出为
2|dev|minus;plus
1|ana|plus;plus
1|dev|minus
解决方案
如果datamash没问题
$ # -g 1,2 tells to group by 1st and 2nd column
$ # collapse 3 collapse 5 tells to combine those column values
$ datamash -t'|' -g 1,2 collapse 3 collapse 5 < ip.txt
1|dev|Smith|minus
1|ana|jhon,peter|plus,plus
2|dev|dash,|minus,plus
$ # easy to change , to ; if input file doesn't contain ,
$ datamash -t'|' -g 1,2 collapse 3 collapse 5 < ip.txt | tr ',' ';'
1|dev|Smith|minus
1|ana|jhon;peter|plus;plus
2|dev|dash;|minus;plus
推荐阅读
- laravel - 网址返回:'Route [login] not defined' 未与任何中间件关联
- postgresql - 将大文本数据插入 postgres
- html - 防止从 jinja2 继承 CSS 包括
- c# - 无法在 ASP.NET MVC 中使用实体框架连接到订购 Oracle 数据库
- python - 在 Win 7 Pro 上升级到最新的 Python
- bash - 引用/保护通过管道传输到 bash 的特殊字符?
- r - 从R中的字符串中提取分布函数的参数
- android - RecyclerView EmptyView 有 RecyclerItem
- python - 如何动态将 Pillow 图像导入 Tkinter
- python-3.x - 压缩 Python 多个 re.sub() 函数