我有一个 [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
选项uniq
will仅有的打印独特的线条。在此文件中,所有行都是重复的,因此它们将不是被打印出来。
然而,更重要的是,输出不会被保存,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