gpt4 book ai didi

bash - 使用 bash/awk 从 csv 中删除重复项

转载 作者:行者123 更新时间:2023-11-29 09:42:17 25 4
gpt4 key购买 nike

我有一个 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

如何删除重复项并处理第二列类型的格式?

最佳答案

快速修复:

$ awk -F "|" '!seen[$0]++{if(a[$1])a[$1]=a[$1]":"$2; else a[$1]=$2;}END{for (i in a)print i, a[i];}' OFS="|" file 
"id-1"|"A":"B":"D"
"id-2"|"C":"B"
"id-3"|"A"
  • !seen[$0]++ 仅当尚未看到该行时才为 true


如果第二列都应该在双引号内

$ awk -v dq='"' 'BEGIN{FS=OFS="|"}
!seen[$0]++{a[$1]=a[$1] ? a[$1]":"$2 : $2}
END{for (i in a){gsub(dq,"",a[i]); print i, dq a[i] dq}}' file
"id-1"|"A:B:D"
"id-2"|"C:B"
"id-3"|"A"

关于bash - 使用 bash/awk 从 csv 中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46711259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com