Como remover duplicatas parciais no bash?

0

Como posso remover duplicatas parciais no bash usando awk, grep ou sort?
Eu tentei sort -u FILE | uniq -w20 , mas não é realmente confiável.

Entrada:

http://www.website.com/1.file
http://www.website.com/2.file
http://www.website.com/3.file
http://www.someotherwebsite.com/1.file
http://www.someotherwebsite.com/2.file
http://www.someotherwebsite.com/3.file

Resultado esperado:

http://www.website.com/3.file
http://www.someotherwebsite.com/3.file
    
por user669761 30.11.2016 / 18:54

1 resposta

1

Uma solução, se todas as strings comuns estiverem bem formadas, usar awk e usar os três primeiros campos como a chave:

awk -F/ '{a[$1$2$3]=$0} END {for(k in a) {print a[k]}}'

Isso dividirá cada linha em campos com base em / como o delimitador. Usamos os primeiros 3 campos como a chave em uma matriz e armazenamos a linha inteira como o valor.

Quando terminarmos com a entrada, percorremos o array e imprimimos o valor, que será sempre a última linha que correspondeu à chave dada.

Como sugerido, poderíamos tornar isso um pouco mais flexível tirando a última parte e comparando o resto:

awk -F/ '{orig=$0; $NF=""; a[$0]=orig} END {for(k in a) {print a[k]}}'

que salvará toda a linha sem ser modificada, fará com que o último campo seja a string vazia e, em seguida, faça o mesmo resto do trabalho da matriz como antes.

    
por 30.11.2016 / 19:48