「uniq --unique」がすべての重複行を削除しないのはなぜですか?

「uniq --unique」がすべての重複行を削除しないのはなぜですか?

走る

printf "lol\nlol\nfoo\n\n\n\n\nbar\nlol\nlol\nfoo\nlol\nfoo" | uniq --unique

印刷

foo
bar
foo
lol
foo

なぜfoo3回印刷されたのですか?uniq --unique削除してはいけませんか?

lolまた、すべての重複項目が削除されたように見えることも注目に値します。なぜ?重複したアイテムは削除されますが、金持ち繰り返す?

ベストアンサー1

uniqman uniq入力を削除するには、入力をソートする必要があります。みんな重複行:

説明する

INPUT(または標準入力)から隣接する一致ラインをフィルタリングし、OUTPUT(または標準出力)に書き込みます。

上記のように、フィルタリングのみが行われます。近い一致する行。これがlolsが削除された理由です。したがって、データは次に渡される前にソートされますuniq

$ printf "lol\nlol\nfoo\n\n\n\n\nbar\nlol\nlol\nfoo\nlol\nfoo" | sort | uniq 

bar
foo
lol

または、GNUを使用してsort以下をスキップしてくださいuniq

$ printf "lol\nlol\nfoo\n\n\n\n\nbar\nlol\nlol\nfoo\nlol\nfoo" | sort --unique

bar
foo
lol

最後に、行の複数の項目を完全に削除するには(デフォルトの動作であるコピーを保持するのではなく)、またはuniq -u質問--uniqueに示すように使用してください。

$ printf "lol\nlol\nfoo\n\n\n\n\nbar\nlol\nlol\nfoo\nlol\nfoo" | sort | uniq -u
bar

ただし、すべての場合にソートが必要です。

おすすめ記事