$ 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.