重複したデータが再印刷される[csv]ファイルがあります。つまり、同じデータが2回印刷されます。使ってみました。ソートの一意性
しかし、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
ですただ一意の行を印刷します。このファイルではすべての行が繰り返されるので、いいえ印刷されます。
しかし、もっと重要なのは、出力が保存されないことです。デフォルトではコンソールにのみ印刷される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
私が提案した2つの提案の欠点は、一時ファイルを使用して再コピーする必要があることです。
答え4
ユニーク -u
一意の行だけが印刷されます。入力した内容には一意の行がないため、uniq -u
何も印刷されません。必要なものは次のとおりですsort
。
sort -u myfile.csv