从 CSV 文件中删除重复条目

从 CSV 文件中删除重复条目

我有一个 [csv] 文件,其中重新打印了重复的数据,即相同的数据打印了两次。我尝试过使用排序的唯一性 然而sort myfile.csv | uniq -u,没有任何变化myfile.csv,我也尝试过,sudo sort myfile.csv | uniq -u但没有区别。

所以目前我的 csv 文件看起来像这样

a
a
a
b
b
c
c
c
c
c

我想要看起来像它

a
b
c

答案1

myfile.csv没有改变的原因是因为-u选项uniqwill仅有的打印独特的线条。在此文件中,所有行都是重复的,因此它们将不是被打印出来。

然而,更重要的是,输出不会被保存,myfile.csv因为uniq只会将其打印到stdout(默认情况下,您的控制台)。

你需要做这样的事情:

$ sort -u myfile.csv -o myfile.csv

选项的含义是:

  • -u- 只保留独特的线条
  • -o- 输出到该文件而不是stdout

您应该查看man sort更多信息。

答案2

如果您想保持文件的顺序(未排序)但仍删除重复项,您也可以这样做

awk '!v[$1]++' /tmp/file

例如

d
d
a
a
b
b
c
c
c
c
c

它将输出

d
a
b
c

答案3

正如贝尔明所表明的那样,排序很棒。他的答案最适合未排序的数据,并且很容易记住和使用。

然而,它也是不稳定的,因为它改变了输入的顺序。如果您绝对需要以相同的顺序处理数据但删除后面的重复项,那么 awk 可能会更好。

$ cat myfile.csv
c
a
c
b
b
a
c


$ awk '{if (!($0 in x)) {print $0; x[$0]=1} }' myfile.csv
c
a
b

奇怪的边缘情况,但它确实不时出现。

另外,如果您在查看数据时已经对数据进行了排序,则可以运行 uniq。

$ cat myfile.csv 
a
a
a
b
b
c
c
c
c
c


$ uniq myfile.csv 
a
b
c

我的两个建议的缺点是您需要使用临时文件并将其复制回来。

答案4

独特的 -u只打印独特的线条。您的输入没有唯一的行,因此uniq -u不打印任何内容。您只需要sort

sort -u myfile.csv

相关内容