【发布时间】:2018-03-24 11:43:49
【问题描述】:
我有一个 csv 文件,格式为:
"id-1"|"A"
"id-2"|"C"
"id-1"|"B"
"id-1"|"D"
"id-2"|"B"
"id-3"|"A"
"id-3"|"A"
"id-1"|"B"
我想在单行中按第一列唯一 ID 和连续类型进行分组,如下所示:
"id-1"|"A:B:D"
"id-2"|"B:C"
"id-3"|"A"
我发现 awk 在处理此类情况方面做得很好。但我能做到的就是:
"id-1"|"A":"B":"D":"B"
"id-2"|"B":"C"
"id-3"|"A":"A"
我使用了这个命令:
awk -F "|" '{if(a[$1])a[$1]=a[$1]":"$2; else a[$1]=$2;}END{for (i in a)print i, a[i];}' OFS="|" file
如何删除重复项并处理第二列类型的格式?
【问题讨论】:
-
为什么
C值在前时输出中的"id-2"|"B:C"而不是"id-2"|"C:B"。 -
@anubhava 我也在寻找排序结果列表。
-
@Qedrix 请注意,任何使用
in运算符(例如for (i in array))的 awk 解决方案,除非它是 gawk 并设置sorted_in不会产生排序输出 - 如果输出看起来像它排序后,这与您的特定数据集纯属巧合,您可以确定它不会与其他输入。
标签: bash csv awk duplicates