我有一个包含一些重复键的CSV文件。我想对这些密钥进行重复数据删除,并将所有值保存在一起。
所以如果输入是
a,foo
b,bar
a,baz
输出应为
a,foo baz
b,bar
答案 0 :(得分:1)
解决方案第一: 不使用数组,首先对Input_file进行排序(使所有第一个字段连续出现),然后根据OP的请求收集值。记忆力很高)
sort -s -t, -k1,1 Input_file |
awk -F, '
prev!=$1 && prev{
print prev FS val;
prev=val=""}
{
val=val?val OFS $NF:$NF;
prev=$1
}
END{
if(val){
print prev FS val}
}'
解决方案第二: 关注awk
可能会对您有所帮助。它可能不会以第一个字段进入Input_file的顺序给出输出(与第三个字段相比,这可能更有效,因为它只使用单个数组)。
awk -F, '{a[$1]=a[$1]?a[$1] OFS $NF:$NF} END{for(i in a){print i FS a[i]}}' Input_file
解决方案3: 关注awk
会以第一个字段输入Input_file的顺序输出。
awk -F, '
!b[$1]++{
c[++count]=$1}
{
a[$1]=a[$1]?a[$1] OFS $NF:$NF
}
END{
for(i=1;i<=count;i++){
print c[i] FS a[c[i]]}
}' Input_file