Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
901 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Shell/Unix] Tableaux

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Shell/Unix] Tableaux

n°2116924
chico008
what the wookie says ?
Posté le 16-12-2011 à 12:43:20  profilanswer
 

Bonjour,  
 
Decidement, j'en pose des questions en prog shell :p
 
Soucis du jour, comment avoir un tableau tout bien, tout beau, bien aligné.
sachant que le nombre de ligne est variables, mais le nombre de colones fixes.
 
Au debut je passait par des print avec un \t en separateur, mais des qu'un des champs est trop long, ca decale.
 
J'ai essayer avec Awk, et j'ai trouver ceci :

Code :
  1. awk 'BEGIN { SUBSEP=":" } { for ( i=1 ; i <=NF ; i++ ) {tab[ NR , i ] = $i }} END { for ( i in tab ) { print tab[i]}} ' ./FIN.lst


Mais voici un extrait du resultat :

Code :
  1. BOXI
  2. :
  3. Gestion
  4. des
  5. logs
  6. debut
  7. session
  8. sauvegarde
  9. quotidienne
  10. QBOXI_
  11. Gestion
  12. des
  13. logs
  14. QBOXI_SAV
  15. BOSAV00DEB
  16. BO
  17. QROGELOG
  18. INCIDENTE
  19. ROLOG10GES


 
Alors que je devrait avoir un truc du genre :  

Code :
  1. SESSION          UPROC           APP     STATUS          FIN     HEURE   PDATE   LABEL
  2. QBOXI_SAV        BOSAV00DEB      BO      INCIDENTE       08/12/2011      21:00:01        08/12/2011      BOXI : debut session sauvegarde quotidienne QBOXI_
  3. QROGELOG         ROLOG10GES      RO      INCIDENTE       08/12/2011      20:00:06        08/12/2011      ROXY : Gestion des logs
  4. QBOXI_SAV        BOSAV00DEB      BO      INCIDENTE       09/12/2011      21:00:00        09/12/2011      BOXI : debut session sauvegarde quotidienne QBOXI_



---------------
Serveur HFR - OpenTTD
mood
Publicité
Posté le 16-12-2011 à 12:43:20  profilanswer
 

n°2116938
Profil sup​primé
Posté le 16-12-2011 à 14:29:01  answer
 

salut,
 
printf peut t'aider. Il faudra que tu surveilles le changement d'indice pour ajouter un retour à la ligne.

n°2116963
chico008
what the wookie says ?
Posté le 16-12-2011 à 18:15:25  profilanswer
 

j'avais essayer, mais j'avais tout sur une ligne du coup ... et j'ai pas trouver comment faire la separation de champs, ni le retour à la ligne.


---------------
Serveur HFR - OpenTTD
n°2116976
Profil sup​primé
Posté le 16-12-2011 à 20:24:58  answer
 

tu as essayé avec split ?

Code :
  1. cat mon_fichier
  2. foo bar baz
  3. foo1 bar1 baz2
  4. awk '{split($0,array); for(i in array)printf(i<NF ? "\t%s" : "\t%s\n" ),array[i]}' mon_fichier
  5. foo bar baz
  6. foo2 bar2 baz2

n°2117246
chico008
what the wookie says ?
Posté le 19-12-2011 à 14:11:26  profilanswer
 

Ca marche presque, j'ai un decalage dans les lignes, et la dernière colone je devrais pas avoir autant d'espace entre les chaines  
 
Voici mon fichier de depart.

Code :
  1. SESSION          UPROC           APP     STATUS          FIN     HEURE   PDATE   LABEL
  2. QROGELOG         ROLOG10GES      RO      INCIDENTE       16/12/2011      20:00:04        16/12/2011      ROXY : Gestion des logs
  3. QBOXI_SAV        BOSAV00DEB      BO      INCIDENTE       16/12/2011      21:00:00        16/12/2011      BOXI : debut session sauvega
  4. rde quotidienne QBOXI_SAV
  5. QROGELOG         ROLOG10GES      RO      INCIDENTE       15/12/2011      20:00:06        15/12/2011      ROXY : Gestion des logs


 
Voici l'arrivé avec le Awk que tu m'a indiquer : (je maitrise vraiment pas le Awk)

Code :
  1. PROD_prodwh2_univadm $ awk '{split($0,array); for(i in array)printf(i<NF ? "\t%s" : "\t%s\n" ),array[i]}' ./FIN.lst
  2.         UPROC   APP     STATUS  FIN     HEURE   PDATE   LABEL
  3.         SESSION ROLOG10GES      RO      INCIDENTE       16/12/2011      20:00:04        16/12/2011      ROXY    :       Gestion des     logs
  4.         QROGELOG        BOSAV00DEB      BO      INCIDENTE       16/12/2011      21:00:00        16/12/2011      BOXI    :       debut   session sauvegarde      quotidienne     QBOXI_SAV
  5.         QBOXI_SAV       ROLOG10GES      RO      INCIDENTE       15/12/2011      20:00:06        15/12/2011      ROXY    :       Gestion des     logs


---------------
Serveur HFR - OpenTTD
n°2117284
Profil sup​primé
Posté le 19-12-2011 à 16:39:33  answer
 

Code :
  1. awk '{split($0,array); for(i=1; i<=NF; i++)printf(int(i)<int(NF) ? "%s\t" : "%s\n" ),array[i]}'

mais, vu qu'il n'y a pas de délimiteur de champs, c'est pas formidable.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Shell/Unix] Tableaux

 

Sujets relatifs
[Shell/Unix] Reactualisation de variable dans une boucleScript TELNET Unix vers Windows
[Shell Unix] Active trace exeuction dans les fonctions[Shell UNIX] Recherche dans une ligne
Question Arborescence Unix !!Convolution de 2 tableaux unidimensionnels avec FFTW C++
Pb avec shell_exec sous WinXP 
Plus de sujets relatifs à : [Shell/Unix] Tableaux


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR