删除重复项并保留在unix中的csv文件中

时间:2016-11-20 19:21:56

标签: linux csv unix

您好我有一个内容类似

的csv文件
NAME,AGE
abc,12
def,13
NAME,AGE  ##here duplicates :though these are column names
sdd,34
krgj,656

我尝试了一个sort命令来执行:

sort -u file.csv -o file.csv

但是所有重复的行都被删除了(保留了最后一行),但我需要保留第一行,以便我可以安全地保存我的列/标题。

请在这方面提供帮助。

3 个答案:

答案 0 :(得分:1)

此任务的惯用awk程序是:

awk '!seen[$0]++' file

对于文件中的每一行($ 0),我们增加了我们看到该行的次数。由于我们使用的是后增量运算符, 第一次遇到一行时,seen[$0]++的值为零。对于该行的所有其他实例,该值不为零。因此,我们否定了第一次获得真正价值的价值。默认操作是打印该行。

答案 1 :(得分:0)

这不是最优雅的解决方案,但它有效。

head -n1 source.csv > output.csv; grep -v "$(head -n1 source.csv)" source.csv >> output.csv

通过将第一行>写入output.csv,然后使用grep -v删除所有第一行并将>>结果附加到output.csv

示例:

root@merlin:/tmp# cat source.csv 
NAME,AGE
abc,12
def,13
NAME,AGE
sdd,34
krgj,656
root@merlin:/tmp# head -n1 source.csv > output.csv; grep -v "$(head -n1 source.csv)" source.csv >> output.csv
root@merlin:/tmp# cat output.csv 
NAME,AGE
abc,12
def,13
sdd,34
krgj,656

如果您还需要重复删除它:

head -n1 source.csv > output.csv; grep -v "$(head -n1 source.csv)" source.csv |sort -u >> output.csv

答案 2 :(得分:0)

使用datamash的非排序重复数据删除行过滤器&#34; rmdup &#34;,(需要datamash rmdup 1 < source.csv v1.0.7 或更新):

NAME,AGE
abc,12
def,13
sdd,34
krgj,656

输出:

{{1}}