走る
printf "lol\nlol\nfoo\n\n\n\n\nbar\nlol\nlol\nfoo\nlol\nfoo" | uniq --unique
印刷
foo
bar
foo
lol
foo
なぜfoo
3回印刷されたのですか?uniq --unique
削除してはいけませんか?
lol
また、すべての重複項目が削除されたように見えることも注目に値します。なぜ?笑重複したアイテムは削除されますが、金持ち繰り返す?
ベストアンサー1
uniq
man uniq
入力を削除するには、入力をソートする必要があります。みんな重複行:
説明する
INPUT(または標準入力)から隣接する一致ラインをフィルタリングし、OUTPUT(または標準出力)に書き込みます。
上記のように、フィルタリングのみが行われます。近い一致する行。これがlol
sが削除された理由です。したがって、データは次に渡される前にソートされます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
ただし、すべての場合にソートが必要です。