我有一个包含许多列和行的 CSV。第 4 列有一些字符串,有些没有。当我尝试过滤掉重复项时,它会删除我想保留的那些。
当我运行时:
awk -F ',' '!seen[$4]++' oldfile.csv > newfile.csv
在
71523180,PRASAD JAMES ANAND, ,#3 ALEX BOYD LINK HILLSBORO
71523190,PRASAD SHAKUNPALA, ,#3 ALEX BOYD LINK HILLSBORO
71523200,PRASAD BOBBY UMENDRA, ,#3 ALEX BOYD LINK HILLSBORO
它返回我想要的:
71523180,PRASAD JAMES ANAND, ,#3 ALEX BOYD LINK HILLSBORO
但是,当我运行那行代码时
71508050,"HUNT, RICHARD F", ,1009 # B FATHOM DR
71508060,"HUNT, RICHARD F", ,1009 # B FATHOM DR
71561950,"HUNT, RICHARD F", ,1009 # B FATHOM DR
71562840,"HUNT, RICHARD F", ,1009 # B FATHOM DR
它会删除所有这些条目。
该怎么办?谢谢
跟进
使用 perl 似乎有效,但给了我一个小错误。这是一个问题吗?
$ perl -w -MText::CSV_XS=csv -e 'csv(in => \*STDIN, filter => { 4 => sub { !$seen{$_}++ }})' <combined4.csv > combine6.csv 名称“main::seen”仅使用一次:-e 第 1 行可能出现错别字。
如果您的 CSV 数据不重要,在引用字段中包含逗号awk
之类的内容,那么与尝试在其上使用或类似内容相比,了解格式的工具是更好的选择。
使用Text::CSV_XS
模块的perl one-liner 示例(通过您的操作系统包管理器或最喜欢的 CPAN 客户端安装):
$ perl -MText::CSV_XS=csv -e 'csv(in => \*STDIN, filter => { 4 => sub { ! $seen{$_}++ }})' < input.csv
71508050,"HUNT, RICHARD F"," ","1009 # B FATHOM DR"
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句