重複データが再印刷された[csv]ファイルがあります。つまり、同じデータが2回印刷されます。 _sort myfile.csv | uniq -u
_で sort's uniq を使用してみましたが、_myfile.csv
_に変更はありません。また、_Sudo sort myfile.csv | uniq -u
_を試しましたが、違いはありません。
だから現在私のcsvファイルはこのように見えます
_a
a
a
b
b
c
c
c
c
c
_
そのようになりたい
_a
b
c
_
myfile.csv
が変更されない理由は、uniq
の-u
オプションがonly一意の行を印刷するためです。このファイルでは、すべての行が重複しているため、notが出力されます。
ただし、さらに重要なことに、uniq
はstdout
(デフォルトではコンソール)に出力するだけなので、出力はmyfile.csv
に保存されません。
あなたはこのようなことをする必要があるでしょう:
$ sort -u myfile.csv -o myfile.csv
オプションの意味:
-u
-一意の行のみを保持-o
-stdout
の代わりにこのファイルに出力します詳細については、man sort
をご覧ください。
ベルミンが示したように、並べ替えは素晴らしいです。彼の答えはソートされていないデータに最適であり、覚えて使用するのは簡単です。
ただし、入力の順序を変更するため、揮発性でもあります。どうしても同じ順序でデータを処理する必要があるが、後で重複を削除する必要がある場合は、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
私の提案の両方の欠点は、一時ファイルを使用してそれをコピーし直す必要があることです。
ファイルの順序を維持したいが(ソートされていない)、それでも重複を削除したい場合は、これを行うこともできます
awk '!v[$1]++' /tmp/file
例えば
d
d
a
a
b
b
c
c
c
c
c
出力されます
d
a
b
c
niq-u
一意の行のみを印刷します。入力には一意の行がないため、uniq -u
何も印刷しません。 sort
のみ必要です:
sort -u myfile.csv