script awk pour regrouper des mots

script awk pour regrouper des mots - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 07-09-2008 à 15:47:04    

Bonjour à toutes et à tous ! :hello:  
J'ai un fichier du genre :
 
toto
titi
tata
tutu
tyty
tete
 
Ce que je souhaite faire est de couper toutes les 3 lignes pour former une ligne regroupant les mots de ces 3 lignes. Dans l'exemple précédent j'aurai quelque chose du genre :
 
toto titi tata
tutu tyty tete
 
Avez-vous une idée ou existe-t-il une commande simple pour faire cela...?
 
Merci en tout cas pour toute aide

Reply

Marsh Posté le 07-09-2008 à 15:47:04   

Reply

Marsh Posté le 06-11-2008 à 22:50:29    

Yop,
 
je te propose cette solution :
 

Code :
  1. #!/bin/bash
  2. TAB=( $(< /tmp/fichier_a_parser) )      # on crer un tableau TAB
  3. c=                                              # on initialise $c au cas ou
  4. while ((c != ${#TAB[@]})) ; do                  # tant que $c est different de la derniere clef du tableau
  5.     echo "${TAB[c++]} ${TAB[c++]} ${TAB[c++]}"  # on concatene les valeures incrementales du tableau
  6. done                                            # fin de while :)


 
Au fait, désolé, c'est pas du awk mais du bash pur jus :D
 
Je vais même pousser le vice à te proposer une solution en perl uniligne : ( dans un terminal )

Code :
  1. $ perl -e 'while(<> ) { chomp; push(@a, $_); }; while($c < $#a) { print join("\t", $a[$c++], $a[$c++], $a[$c++]) . "\n"; }' fichier


Message édité par sputnick le 07-11-2008 à 04:15:17
Reply

Marsh Posté le 10-06-2009 à 17:08:53    

ou encore

Code :
  1. perl -pe '$.%3!=0&&s/\n/$"/' fichier


Message édité par hardball le 10-06-2009 à 23:11:31
Reply

Marsh Posté le 11-06-2009 à 17:04:24    

Deterrage de post ? Haannn ! Mon perl a évolué depuis, par contre je veux bien que tu explique ton one-liner hardball

Reply

Marsh Posté le 13-06-2009 à 11:22:49    

Salut et merci pour vos réponse.
Moi aussi je veux bien que tu m'explique ta commande hardball....:)
Merci en tout cas


Message édité par misterZidane le 13-06-2009 à 11:23:23
Reply

Marsh Posté le 13-06-2009 à 21:51:01    

Ah, ok, en décortiquant/espaçant c'est plus clair :

Code :
  1. perl -pe '$. % 3 != 0 && s/\n/$"/' fichier


Autrement dit, on fait un modulo avec "3" sur la variable speciale $. ( le nombre de lignes ).
Si l'expression ne renvoie pas zero, on substitue les retours à la lignes "\n" par le separateur de liste par defaut ( un espace )
ce qui en resulte pas l'affichage de 3 valeures sur la meme ligne et ainsi de suite.
Tres interessant, et tres élégant.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed