classificando uma lista mantendo uma entrada de cada linha duplicada

4

Eu tenho uma lista de filmes que eu carrego diariamente e vem no seguinte formato

act-of-valor-2012
act-of-valor-2012
the-possession-2012
the-possession-2012
american-crude-2008
american-crude-2008
when-strangers-appear-2001
like-father-like-son-2005
like-father-like-son-2005
get-him-to-the-greek-2010
get-him-to-the-greek-2010
wall-street-money-never-sleeps-2010
wall-street-money-never-sleeps-2010
christmas-evil-1980
days-of-glory-1944

Eu preciso manter isso na mesma ordem, mas excluo as linhas duplicas para que se torne

act-of-valor-2012
the-possession-2012
american-crude-2008
when-strangers-appear-2001
like-father-like-son-2005
get-him-to-the-greek-2010
wall-street-money-never-sleeps-2010
christmas-evil-1980
days-of-glory-1944

classificar altera a ordem que alguém tem alguma idéia de como eu posso fazer isso?

Obrigações

    
por user2936691 14.07.2016 / 22:38

2 respostas

6

Você quer o comando uniq .

De man uniq :

 Filter adjacent matching lines from INPUT (or standard input), writing to OUTPUT (or standard output).

       With no options, matching lines are merged to the first occurrence.

Use da seguinte forma:

uniq movies.txt

Envie como desejado.

    
por Jos 14.07.2016 / 22:43
4

Versão do AWK:

awk '{array[i++]=$0}END{for(j=0;j<=i;j++) if(array[j] != array[j-1]){print array[j]}  }' movies.txt 

Basicamente, o que ele faz é ler os dados no array e imprimir apenas as linhas que não têm linha anterior como duplicadas.

O caminho mais curto seria como mostrado aqui :

$ awk '!a[$0]++' movies.txt                                                     
act-of-valor-2012
the-possession-2012
american-crude-2008
when-strangers-appear-2001
like-father-like-son-2005
get-him-to-the-greek-2010
wall-street-money-never-sleeps-2010
christmas-evil-1980
days-of-glory-1944
    
por Sergiy Kolodyazhnyy 14.07.2016 / 23:02