Bash caractères doubles

Résolu/Fermé
Jeremyprog -  
 Jeremyprog -
Bonjour,

J'ai un fichier texte qui contient :

00112233
01234567
11234556


Je voudrais supprimer toutes les lignes qui contiennent strictement plus de 2 chiffres (distincts) dupliqués, comme par exemple
00112233
.

Je veux garder cells qui contiennent au plus deux chiffres dupliqués, comme par exemple
11234556


J'essaie avec
awk
et
sed
mais je n'arrive pas à ce que je voudrais :(
A voir également:

4 réponses

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
$ awk -F "" '{x=0; for(n=1; n<=NF; n++)if($n==$(n+1))x++; if(x<3)print $0}' fichier
01234567
11234556

1
Jeremyprog
 
Bonjour, Merci beaucoup ca fonctionne parfaitement :)
Tu es impressionnant, à chaque question que je pose tu me trouve les solutions.
Vraiment un très grand MERCI à toi
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
à tester sur plus de données
$ cat fichier
900112233
00112233
01234567
11234556
$
$ awk -F "" '$1!=$2 || $3!=$4 {print $0}' fichier
900112233
01234567
11234556
1
Jeremyprog
 
MERCI
Ça efface bien les lignes qui commence par un double mais pas toutes.
Dans ton exemple
11234556
aurait dû être supprimé il commence par un double (
11
)
0
Jeremyprog
 
Ça fonctionne
awk -F "" '$1!=$2 {print $0}'  < fichier
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
0
Jeremyprog
 
Bonjour, excuse-moi j'ai une question,
Comment puis-je supprimer toutes les lignes qui commencent par un double dans un fichier texte, s'il te plaît ?
0
mamiemando Messages postés 33769 Date d'inscription   Statut Modérateur Dernière intervention   7 878
 
Dans l'absolu, c'est une nouvelle question qui n'a rien à avoir avec le problème initial donc tu devrais la poser dans un nouveau fil de discussion. Le plus simple dans ton cas est de faire un filtre basé sur une expression régulière, par exemple à l'aide de
egrep
  • Si tu parles d'un double au sens nombre flottant (par exemple -1.23 ou +4.56 ou 78.90 ou n'importe quelle valeur entière (signée ou non signée)), cela s'écrit :


egrep -v "^(-|[+])?[0-9]+([.][0-9]+)?" fichier


Exemple :

(mando@silk) (~) $ cat fichier
1.23 abc
-4.56 def
ghi 1.23
klm opq

(mando@silk) (~) $ egrep -v "^(-|[+])?[0-9]+([.][0-9]+)?" fichier
ghi 1.23
klm opq
  • Si tu parles d'un chiffre dupliqué il faut simplement adapter le filtre. Si j'ai bien compris cela revient à supprimer les lignes qui commencent par 11, 22, 33 ... 99, ou 00. Le filtre devient :


egrep -v "^(00|11|22|33|44|55|66|77|88|99|00)" fichier


Bonne chance
1
Jeremyprog > mamiemando Messages postés 33769 Date d'inscription   Statut Modérateur Dernière intervention  
 
Merci ca fonctionne bien :)
Dsl pour le fil j'aurai du le mettre en nouveau fil de discussion
0