Bash caractères doubles

Résolu/Fermé
Jeremyprog - Modifié le 18 janv. 2022 à 15:23
 Jeremyprog - 18 janv. 2022 à 15:25
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 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
16 janv. 2022 à 11:52
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
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 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
18 janv. 2022 à 11:21
à 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
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
Ça fonctionne
awk -F "" '$1!=$2 {print $0}'  < fichier
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
16 janv. 2022 à 13:18
0
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 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
Modifié le 18 janv. 2022 à 15:30
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 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024
18 janv. 2022 à 15:25
Merci ca fonctionne bien :)
Dsl pour le fil j'aurai du le mettre en nouveau fil de discussion
0