Sed ou awk ou ...

Résolu/Fermé
trauqnej Messages postés 154 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 5 septembre 2022 - 11 févr. 2012 à 12:50
trauqnej Messages postés 154 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 5 septembre 2022 - 15 févr. 2012 à 20:40
Bonjour,
J'ai un fichier (voir ci-dessous pour un exemple) qui ne contient qu'une ligne.

Je voudrais qu'à la rencontre d'un nombre supérieur à 2000 un retour chariot s'insère.

Je pensais que sed pouvait intégrer de telle fonction du style :
sed 'occurrences>2000 s/occurrence/occurrence\n/g' fichier.lorem
Mais j'ai pas trouvé.

J'ai essayé awk avec :
awk ' ($NF > 2000) {$NF=$NF"\n"}; {print $0}' fichier.lorem
Mais vu qu'il n'y a qu'une ligne, il me donne le dernier champ de la ligne.

et pis j'ai essayé d'autres trucs encore moins convaincant.

Donc voilà ce qui m'amène à poser cette question :
Avez-vous un idée pour ce traitement ?

fichier exemple : fichier.lorem :
Lorem 4521ipsum dolor sit amet, consectetur adipisicing 15 elit, sed do eius3562mod tempor incididunt 5124ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud 2 exercitation ullamco laboris nisi ut 65231 aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat 5124 cupidatat non 4584proident, sunt in culpa qui officia deserunt 2 mollit anim id est laborum.



cordialement,


<config>Debian 6 , Iceweasel, postgresql</config>

2 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
11 févr. 2012 à 13:08
Salut,

$ cat plop
Lorem 4521ipsum dolor sit amet, consectetur adipisicing 15 elit, sed do eius3562mod tempor incididunt 5124ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud 2 exercitation ullamco laboris nisi ut 65231 aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat 5124 cupidatat non 4584proident, sunt in culpa qui officia deserunt 2 mollit anim id est laborum.

$ sed 's/[2-9][0-9]\{3,\}/&\n/g' plop
Lorem 4521
ipsum dolor sit amet, consectetur adipisicing 15 elit, sed do eius3562
mod tempor incididunt 5124
ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud 2 exercitation ullamco laboris nisi ut 65231
 aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat 5124
 cupidatat non 4584
proident, sunt in culpa qui officia deserunt 2 mollit anim id est laborum.

$

;-))
1
trauqnej Messages postés 154 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 5 septembre 2022 23
15 févr. 2012 à 20:40
oui c'est ça ! avec une petite nuance tout de même : il faut un espace après s/ . ce qui donne :
sed 's/ [2-9][0-9]\{3,\}/&\n/g' plop

merci beaucoup
0
salut,

quelle devrait être la sortie ?

ici tu ne teste que la valeur du nombre total de champ, c'est à dire le dernier champ.
il faudrait une boucle for de 1 à NF et tester chaque champs.
0