shell - 根据列值将多行组合成单行
问题描述
我有一个包含以下记录的文件。
$File.txt
APPLE,A,10
APPLE,A,20
APPLE,A,30
GRAPE,B,12
GRAPE,B,13
我希望输出如下所示:
APPLE,A,10|20|30,
GRAPE,B,12|13,
我尝试了以下方法并获得了所需的输出。但寻找更简单的东西。
awk -F"," '{if(NR<2){if(!seen[$1]++){printf "%-8s|",$3}}else{if(seen[$1]++){printf "%-12s|",$3}else{ printf ",\n%-12s|",$3}}}' File1.txt | awk -F"|" '{for(i=1;i<NF-1;i++){ printf "%-12s|",$i}printf "%-12s,\n", $(NF-1)}'|sed 's/ //g' > O1.txt
awk -F"," '{print $1","$2","}' File1.txt | uniq > O2.txt
paste -d'\0' O2.txt O1.txt
解决方案
像这样的东西?
$ awk -F, '{k=$1 FS $2; a[k]=((k in a)?a[k]"|":k FS)$3}
END {for(k in a) print a[k] FS}' file
APPLE,A,10|20|30,
GRAPE,B,12|13,
要删除最后一个逗号,请删除FS
in print 语句。如果您的文件已经排序,则可以进一步简化。
推荐阅读
- ios - Swift - 字典提取 API
- google-tag-manager - Google 跟踪代码管理器 (GTM) 是否处理在线标识符/cookie 标识符?
- python - 使用数组列表作为索引,遍历数组以从数据集中绘制 20 张图像时遇到问题
- json - 如何在 Ansible 中访问数组内的对象内的键/对值?
- c# - Signal R reconnect 似乎创建了一个新线程
- android - Firebase 提供 Task 而不是 Url
- c - 如何访问 ESP-IDF 应用程序代码中的编译时间?
- python - 如何输出到 txt(使用处理 3 在 Python 中编程)
- vbscript - Windows Server 2003:任务计划程序未成功运行 VBS 文件作业
- python - 找不到页面(404),django注销功能出错