如何使用unix过滤uniq行并为那些行的某些列管道数据?

lo8azlld  于 8个月前  发布在  Unix
关注(0)|答案(1)|浏览(79)

下面是我的档案的样子-

User,Rights,Login_date
A,Admin,12-SEP-23
A,Accountant,01-SEP-23
B,Admin,05-SEP-23
B,Clerk,31-AUG-23

=============================
过滤后的预期输出应为-

User   Rights     Login_date
A,Admin|Accountant,12-SEP-23
B,Admin|Clerk,05-SEP-23

我能够过滤重复,但无法管道的权利。
enter image description here

t30tvxxf

t30tvxxf1#

下面是一个Ruby,它内置了CSV解析器,可以做到这一点:

ruby -r csv -e 'data=CSV.parse($<.read,**{:headers=>true})
puts data.headers.join("\t")
puts CSV.generate{|csv|
    data.group_by{|row| row["User"]}.each{|k,v|
        rights=v.map{|row| row["Rights"]}.join("|")
        csv<<[v[0]["User"],rights,v[0]["Login_date"]]
    }
}    
' file

图纸:

User    Rights  Login_date
A,Admin|Accountant,12-SEP-23
B,Admin|Clerk,05-SEP-23

相关问题