Découpage ligne avec awk

Fermé
abou - 18 déc. 2010 à 16:32
 abou - 18 déc. 2010 à 21:47
Bonjour,

J'ai un millier de champs qui se retrouvent tous dans une seule ligne d'un fichier texte comme ceci :

46500 53340 61620 67380 46560 53400 61680 67440 46560 53460 61740 67500 46560 53520 61800 67560 46620 53580 61860 67620 46620 53640 61920 67680 46680 53700 62040 67740 46680 53760 62100 67800 46740 53820 62160 67860 46740 53940 62220 67920 46740 54000 62340 67980 46800...

awk n'y voit qu'une seule ligne, mais moi j'ai besoin de restructurer mon fichier de sorte que chaque ligne contient uniquement 4 champs.

Une idée ?

Merci d'avance

A voir également:

7 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
18 déc. 2010 à 16:44
Salut,

Avec sed
lami20j@debian-acer:~$ cat fic
46500 53340 61620 67380 46560 53400 61680 67440 46560 53460 61740 67500 46560 53520 61800 67560 46620 53580 61860 67620 46620 53640 61920 67680 46680 53700 62040 67740 46680 53760 62100 67800 46740 53820 62160 67860 46740 53940 62220 67920 46740 54000 62340 67980 46800
lami20j@debian-acer:~$ sed -r 's/(([0-9]+ ){4})/\1\n/g' fic
46500 53340 61620 67380 
46560 53400 61680 67440 
46560 53460 61740 67500 
46560 53520 61800 67560 
46620 53580 61860 67620 
46620 53640 61920 67680 
46680 53700 62040 67740 
46680 53760 62100 67800 
46740 53820 62160 67860 
46740 53940 62220 67920 
46740 54000 62340 67980 
46800
lami20j@debian-acer:~$ sed 's/\(\([0-9]\+ \)\{4\}\)/\1\n/g' fic
46500 53340 61620 67380 
46560 53400 61680 67440 
46560 53460 61740 67500 
46560 53520 61800 67560 
46620 53580 61860 67620 
46620 53640 61920 67680 
46680 53700 62040 67740 
46680 53760 62100 67800 
46740 53820 62160 67860 
46740 53940 62220 67920 
46740 54000 62340 67980 
46800



0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 418
18 déc. 2010 à 16:54
Salut,

Oups grillé, et en plus de fort belle manière ;-))

J'oublie toujours les références arrières ;-(
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
Modifié par lami20j le 18/12/2010 à 17:03
Salut,

J'oublie toujours les références arrières ;-(

Ben, non, tu n'oublies pas. Tu as utilisé même 4 ;-)
En revanche [^ ] est plutôt mieux que mon [0-9], dans le cas ou les champs contiennent autres chose que chiffre ou espace ;-)

 sed 's/\(\([^ ]\+ \)\{4\}\)/\1\n/g' fic
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 418
18 déc. 2010 à 17:07
Re-

Enfin je voulais dire le groupement plutôt, mais tu m'auras compris ;-))
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
18 déc. 2010 à 17:10
Re,

Oui, c'était juste pour te charrier un peu ;-)
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 418
18 déc. 2010 à 16:52
Salut,

Avec "sed" :

$ cat plop
46500 53340 61620 67380 46560 53400 61680 67440 46560 53460 61740 67500 46560 53520 61800 67560 46620 53580 61860 67620 46620 53640 61920 67680 46680 53700 62040 67740 46680 53760 62100 67800 46740 53820 62160 67860 46740 53940 62220 67920 46740 54000 62340 67980 46800

$ sed 's/\([^ ]* \)\([^ ]* \)\([^ ]* \)\([^ ]*\) /\1\2\3\4\n/g' plop
46500 53340 61620 67380
46560 53400 61680 67440
46560 53460 61740 67500
46560 53520 61800 67560
46620 53580 61860 67620
46620 53640 61920 67680
46680 53700 62040 67740
46680 53760 62100 67800
46740 53820 62160 67860
46740 53940 62220 67920
46740 54000 62340 67980
46800

$ 

;-))
0
Merci à vous tous.
Vous êtes plus compétents les uns que les autres ;-)
Merci encore.
0
C'est bizarre. Chez moi ça ne marche pas. Est-ce parce que mes champs sont tabulés ?

Cordialement
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
18 déc. 2010 à 20:38
Salut,

Affiche le résultat de
perl -pe 's/^((?:[^ ]+ ){4}).*/$1/;s/(.)/ord($1) .  " "/eg' ton_fichier
0
Salut

J'obtiens ceci :

52 54 52 52 48 9 53 51 50 50 48 9 54 49 53 48 48 9 54 55 50 54 48 9 52 54 53 48 48 9 53 51 50 56 48 9 54 49 53 54 48 9 54 55 51 50 48 9 52 54 53 48 48 9 53 51 51 52 48 9 54 49 54 50 48 9 54 55 51 56 48 9 52 54 53 54 48 9 53 51 52 48 48 9 54 49 54 56 48 9 54 55 52 52 48 9 52 54 53 54 48 9 53 51 52 54 48 9 54 49 55 52 48 9 54 55 53 48 48 9 52

Une idée ?
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
Modifié par lami20j le 18/12/2010 à 21:41
Salut,

Oui, tu as des tabulations.
Tu vois le 9 qui se répète? C'est le code ascii pour tabulation

52 54 52 52 48 9 53 51 50 50 48 9 54 49 53 48 48 9 54 55 50 54 48 9 52 54 53 48 48 9 53 51 50 56 48 9 54 49 53 54 48 9 54 55 51 50 48 9 52 54 53 48 48 9 53 51 51 52 48 9 54 49 54 50 48 9 54 55 51 56 48 9 52 54 53 54 48 9 53 51 52 48 48 9 54 49 54 56 48 9 54 55 52 52 48 9 52 54 53 54 48 9 53 51 52 54 48 9 54 49 55 52 48 9 54 55 53 48 48 9 52
~
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
18 déc. 2010 à 21:36
Re,

lami20j@debian-acer:~$ sed 's/\(\([^\t]\+\t\)\{4\}\)/\1\n/g' fic
46500	53340	61620	67380	
46560	53400	61680	67440	
46560	53460	61740	67500	
46560	53520	61800	67560	
46620	53580	61860	67620	
46620	53640	61920	67680	
46680	53700	62040	67740	
46680	53760	62100	67800	
46740	53820	62160	67860	
46740	53940	62220	67920	
46740	54000	62340	67980	
46800
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Rien n'a changé pour moi.
Mon fichier s'affiche toujours comme ça :

46440 53220 61500 67260 46500 53280 61560 67320 46500 53340 61620 67380 46560 53400 61680 67440 46560 53460 61740 67500 46560 53520 61800 67560 46620 53580 61860 67620 46620 53640 61920 67680 46680 53700 62040 67740 46680 53760 62100 67800 46740 53820 62160 67860 46740 53940 62220 67920 46740 54000 62340 67980 46800 54060 62400 68100 46800 54120 62520 68160 46800 54180 62580 68220
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
18 déc. 2010 à 21:42
Alors mets ton fichier sur cjoint.com, mais avant de le mettre compresse le.
Tu mettras ici le lien obtenu sur cijoint pour qu'on puisse télécharger ton fichier
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
18 déc. 2010 à 21:44
Ou essai ça
perl -pe 's/(([^\s]+\s+){4})/$1\n/g' ton_fichier
0
Impeccable ta dernière commande perl.
Merci infiniment.
0