从csv文件中的列中删除重复的条目

时间:2017-03-28 17:21:34

标签: bash shell awk sed

我有一个csv文件在两列中有超过10000行。我必须删除第1列中的重复条目。 样本输入

col1,col3
od1,pd1
od1,pd4
od2,pd1
od2,pd2
od3,pd6
od3,pd688
od3,pg7

示例输出

col1,col3
od1,pd1
,pd4
od2,pd1
,pd2
od3,pd6
,pd688
,pg7

3 个答案:

答案 0 :(得分:1)

awk可以使用关键数组col1轻松处理此问题:

awk 'BEGIN{FS=OFS=","} seen[$1]++{$1=""} 1' file

col1,col3
od1,pd1
,pd4
od2,pd1
,pd2
od3,pd6
,pd688
,pg7

答案 1 :(得分:0)

您可以使用awk轻松完成此操作

命令是

awk -F"," '{if(!a[$1]++) print $0;}' file.csv

根据您的csv格式使用-F标志设置分隔符。

答案 2 :(得分:0)

如果您的文件已排序(按第一个字段),那么

$ cat f
col1,col3
od1,pd1
od1,pd4
od2,pd1
od2,pd2
od3,pd6
od3,pd688
od3,pg7

# Either
$ awk  'BEGIN{FS=OFS=","}$1!=p{p=$1;print;next}{$1=""}1' f
col1,col3
od1,pd1
,pd4
od2,pd1
,pd2
od3,pd6
,pd688
,pg7

# Or
$ awk  'BEGIN{FS=OFS=","}$1==p{$1="";print;next}{p=$1}1' f
col1,col3
od1,pd1
,pd4
od2,pd1
,pd2
od3,pd6
,pd688
,pg7