Excluir linhas contendo texto repetido

4

Eu tenho um arquivo contendo dois caminhos em cada linha. Quero remover as linhas que contêm o mesmo caminho duas vezes.

Eu trabalho no Linux e no Solaris. Eu gostaria de um one-liner em sed ou awk ou perl.

Exemplo de arquivo de entrada:

     /usr/lib/libgmp.so.3.3.3 /usr/lib/libgmp.so.3.3.3
     /usr/lib/libxslt.so.1.1.17 /usr/lib/libxslt.so.1.1.17
     /usr/lib/sse2/libgmp.so.3.3.3 /usr/lib/sse2/libgmp.so.3.3.3
     /usr/local/swp-tomcat-6.0/lib/commons-logging-1.1.1.jar /usr/local/swp-tomcat-6.0/lib/commons-logging-1.1.1.jar
     /usr/share/doc/libXrandr-1.1.1 /usr/share/doc/libXrandr-1.1.1
     /usr/share/doc/libxslt-1.1.17 /usr/share/doc/libxslt-1.1.17
     /etc/3.3.3.255 /etc/172.17.211.255
     /etc/1.1.1.255 /etc/172.17.213.255

Resultado esperado:

     /etc/3.3.3.255 /etc/172.17.211.255
     /etc/1.1.1.255 /etc/172.17.213.255
    
por yael 04.06.2013 / 12:28

3 respostas

5
awk '{ if ($1 != $2 ) print $1" "$2; }' file

Basta substituir o arquivo pelo arquivo apropriado.

Ou como @manatwork mencionada nos comentários e mais simples

awk '$1!=$2' file
    
por 04.06.2013 / 12:38
2

Você pode expressar texto repetido em regexps do grep (isso é uma extensão da noção matemática de expressão regular).

grep -v '^ *\([^ ][^ ]*\)  * *$'

[^ ][^ ]* corresponde a um ou mais caracteres não espaciais. Os parênteses de barra invertida tornam isso um grupo e significa "o mesmo texto do primeiro grupo".

    
por 05.06.2013 / 02:25
0

Isso pode funcionar para você (GNU sed):

sed -r '/(\S+)\s/d' file
    
por 10.06.2013 / 22:49