Deletar frase em lista (1ª ocorrência) [RESOLVIDO]

1. Deletar frase em lista (1ª ocorrência) [RESOLVIDO]

Xerxes
xerxeslins

(usa openSUSE)

Enviado em 31/03/2016 - 10:27h

Olá scriptudos. Tenho um arquivo com várias linhas. Cada linha uma frase.

exemplo:

banana nanica
maçã argentina
laranja mimo
banana nanica
laranja mimo


Perceba que há frases que aparecem duas vezes na lista. Que comando eu uso para remover apenas a primeira ocorrência de uma frase? (repetida ou não).

Obrigado.


  


2. MELHOR RESPOSTA

Wellington
wellington_r

(usa Debian)

Enviado em 31/03/2016 - 11:59h

Testei o comando e funcionou (eu achei que o xerxes precisava executar o script para cada frase existente, por isso tinha sugerido soluções mais mirabolantes):

wellington@PC:~$ cat file
banana nanica
maçã argentina
laranja mimo
banana nanica
laranja mimo

wellington@PC:~$ sed '0,/banana nanica/{//d;}' file
maçã argentina
laranja mimo
banana nanica
laranja mimo

wellington@PC:~$ sed '0,/laranja mimo/{//d;}' file
banana nanica
maçã argentina
banana nanica
laranja mimo







3. Re: Deletar frase em lista (1ª ocorrência) [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 31/03/2016 - 10:32h

Tá d sacanagem, né? Vc é o mais scriptudo daqui, oras! Bom, eu faria com sort + uniq. Assim eu removeria todas as ocorrências repetidas.
--
Renato Carneiro Pacheco
Certificado Linux LPIC-1
Especialista em Segurança em Redes de Computadores
Graduado em Redes de Comunicação

http://br.linkedin.com/in/renatocarneirop
http://www.facebook.com/renatocarneirop

"Não acredite no que eu digo, pois é a minha experiência e não a sua. Experimente, indague e busque." - Osho Rajneesh


4. Re: Deletar frase em lista (1ª ocorrência) [RESOLVIDO]

Xerxes
xerxeslins

(usa openSUSE)

Enviado em 31/03/2016 - 10:39h

renato_pacheco escreveu:

Tá d sacanagem, né? Vc é o mais scriptudo daqui, oras! Bom, eu faria com sort + uniq. Assim eu removeria todas as ocorrências repetidas.
--
Renato Carneiro Pacheco
Certificado Linux LPIC-1
Especialista em Segurança em Redes de Computadores
Graduado em Redes de Comunicação

http://br.linkedin.com/in/renatocarneirop
http://www.facebook.com/renatocarneirop

"Não acredite no que eu digo, pois é a minha experiência e não a sua. Experimente, indague e busque." - Osho Rajneesh


Olá! kkkk eu uso um pouco de script, mas não tenho intimidade. Toda vez que preciso de algo eu tenho que perguntar ou pesquisar, pois não sei decorado. =/

A solução que você propôs remove todos os repetidos de uma vez. Eu queria remover apenas a primeira ocorrência da frase (repetida ou não). Por exemplo, eu aplicaria o comando para remover o "laranja mimo" e removeria apenas a primeira ocorrência dessa frase e deixaria o resto como está.

Mas não sei como.

--
https://goo.gl/uu8OUX


5. Re: Deletar frase em lista (1ª ocorrência) [RESOLVIDO]

Wellington
wellington_r

(usa Debian)

Enviado em 31/03/2016 - 10:40h

Se tiver 3 ocorrências de uma mesma frase, você quer que fique apenas uma ou duas?


6. Re: Deletar frase em lista (1ª ocorrência) [RESOLVIDO]

Wellington
wellington_r

(usa Debian)

Enviado em 31/03/2016 - 10:42h

E no caso de ter apenas uma ocorrência, você quer que remova completamente essa frase do seu arquivo?


7. Re: Deletar frase em lista (1ª ocorrência) [RESOLVIDO]

Xerxes
xerxeslins

(usa openSUSE)

Enviado em 31/03/2016 - 10:45h

wellington_r escreveu:

Se tiver 3 ocorrências de uma mesma frase, você quer que fique apenas uma ou duas?


quero que fique a quantidade total menos um. Pois queria o comando pra remover apenas a primeira ocorrência. Se sobrar três, ou dois, tanto faz.

--
https://goo.gl/uu8OUX


8. Re: Deletar frase em lista (1ª ocorrência) [RESOLVIDO]

Xerxes
xerxeslins

(usa openSUSE)

Enviado em 31/03/2016 - 10:46h

wellington_r escreveu:

E no caso de ter apenas uma ocorrência, você quer que remova completamente essa frase do seu arquivo?


sim!

--
https://goo.gl/uu8OUX


9. Re: Deletar frase em lista (1ª ocorrência)

Wellington
wellington_r

(usa Debian)

Enviado em 31/03/2016 - 10:47h

Se as duas suposições que fiz acima forem verdadeiras, você pode ordenar em ordem alfabética, fazer um loop pra percorrer linha a linha e armazenar sempre a última linha em uma variável. Aí você compara a linha atual com a variável da linha anterior. Se for diferente, você elimina o conteúdo da linha atual, mas deixa a quebra de linha ainda lá, pra facilitar na lógica do loop. No final você dá um comando pra eliminar as linhas em branco.

Infelizmente não sei fazer isso de cabeça, teria que pesquisar o comando pra eliminar o conteúdo da linha, pra eliminar as linhas em branco, etc.


10. Re: Deletar frase em lista (1ª ocorrência)

Paulo
paulo1205

(usa Ubuntu)

Enviado em 31/03/2016 - 10:50h

Sacanagem ter de chegar para o Xerxes com aquele discurso de que “geralmente é considerado impróprio ficar pedindo resposta pronta em fórum público, e isso não se aplica apenas ao VoL, mas a fóruns na Internet em geral, etc. etc. etc.”

A que ponto nós chegamos?! Tudo culpa do PT!! ;)


Brincadeiras à parte, a solução é simples: use arrays associativos na sua linguagem favorita.


11. Re: Deletar frase em lista (1ª ocorrência) [RESOLVIDO]

William Amaral de Souza
Williamm

(usa Linux Mint)

Enviado em 31/03/2016 - 10:51h

Buenas, da pra fazer algo assim..


#!/bin/bash
for i in $( cat lista.txt)
do
if [ $(cat lista2.txt | grep "$i" ) 2> /dev/null -z ]; then
echo "$i - nao existe"
echo "$i" >> lista2.txt
else
echo "$i - existe"
fi
done



12. Re: Deletar frase em lista (1ª ocorrência) [RESOLVIDO]

Xerxes
xerxeslins

(usa openSUSE)

Enviado em 31/03/2016 - 10:52h

wellington_r escreveu:

Se as duas suposições que fiz acima forem verdadeiras, você pode ordenar em ordem alfabética, fazer um loop pra percorrer linha a linha e armazenar sempre a última linha em uma variável. Aí você compara a linha atual com a variável da linha anterior. Se for diferente, você elimina o conteúdo da linha atual, mas deixa a quebra de linha ainda lá, pra facilitar na lógica do loop. No final você dá um comando pra eliminar as linhas em branco.

Infelizmente não sei fazer isso de cabeça, teria que pesquisar o comando pra eliminar o conteúdo da linha, pra eliminar as linhas em branco, etc.


Obrigado vou pensar nisso.

--
https://goo.gl/uu8OUX



01 02 03



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts