$ LC_ALL=C sort -r <file | LC_ALL=C sort -k1,1 -us
hxxp://a.com "good"
hxxp://about.com
hxxp://b.com "good"
hxxp://c.com "good"
hxxp://google.com "Seen"
hxxp://reddit.com
hxxp://x.com
hxxp://y.com
hxxp://yahoo.com "Check again"
hxxp://z.com
O primeiro sort
ordena o arquivo na ordem inversa, usando a linha inteira como chave de classificação. Isso resultará no resultado intermediário
hxxp://z.com
hxxp://yahoo.com "Check again"
hxxp://yahoo.com
hxxp://y.com
hxxp://x.com
hxxp://reddit.com
hxxp://google.com "Seen"
hxxp://google.com
hxxp://c.com "good"
hxxp://c.com
hxxp://c.com
hxxp://b.com "good"
hxxp://about.com
hxxp://a.com "good"
hxxp://a.com
dados dados do exemplo. Observe como as linhas que contêm anotações extras sempre vêm antes das linhas correspondentes, sem anotações extras.
O segundo sort
produz apenas linhas cuja chave de classificação é exclusiva. Usamos apenas o primeiro campo (o URL) como chave de classificação. Também pedimos que sort
use um algoritmo de classificação "estável" com -s
. Isso significa que a ordem das linhas com chaves idênticas não mudará do que está na entrada.
A combinação -u
e -s
fornece apenas as linhas com anotações extras para os URLs repetidos.
O LC_ALL=C
bit é para garantir que sort
obtenha um código de idioma sã para que as linhas sejam classificadas corretamente para que isso funcione.