您好我有一个内容类似
的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
但是所有重复的行都被删除了(保留了最后一行),但我需要保留第一行,以便我可以安全地保存我的列/标题。
请在这方面提供帮助。
答案 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}}