Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 30/06/2009, à 10:31

iuchiban

[Résolu] Transposition de fichier texte

Bonjour tout le monde,

J'ai un petit soucis avec un fichier texte.
J'ai fait un script qui me donne un fichier texte contenant sur chaque ligne :
- le nom d'un job
- une suite de 144 valeurs (pas de 10min pour toute la journée)

J'ai mis le pas à 10min afin de pouvoir intégrer le fichier dans un tableau excel qui ne gère que 256 colonnes mais comme à terme je voudrais baisser le pas à 1min, il me faut donc prévoir 1440 colonnes.

Je souhaite donc le transposer pour avoir mes séries en colonnes sachant.

Mes outils à dispo sont shell et PERL (AIX inside).

Merci d'avance.

PS : les scripts PERL que j'ai trouvés ne fonctionnent pas vraiment.


C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.

Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.

Hors ligne

#2 Le 30/06/2009, à 11:10

Teofifil

Re : [Résolu] Transposition de fichier texte

Bonjour,

Tu as un autre outil à dispo c'est gcc avec la possibilité de faire un programme soit en C ou C++ (couplé avec QT4 via Qdevelop).
Je ne connais pas perl mais pour QT je te renverrai ici http://forum.qtfr.org/viewtopic.php?pid=58532#p58532 et au lien là :http://www.digitalfanatics.org/projects … ter09.html

Après, avoir des lignes ou des colonnes tout dépend du séparateurs entre les données. Ton fichier texte peut être ligne par ligne simplement lors de sa lecture tu affecteras via C++ le contenu d'une ligne à une colonne dans excel.

En espérant t'avoir aidé.

Dernière modification par Teofifil (Le 30/06/2009, à 11:11)

Hors ligne

#3 Le 30/06/2009, à 11:14

iuchiban

Re : [Résolu] Transposition de fichier texte

iuchiban a écrit :

Mes outils à dispo sont shell et PERL (AIX inside).

roll

Pas de gcc dispo (serveur IBM AIX)

Mais merci d'avoir répondu big_smile


C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.

Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.

Hors ligne

#4 Le 30/06/2009, à 11:46

claudius01

Re : [Résolu] Transposition de fichier texte

Bonjour,

Avec les seuls commandes cat, grep , tr et paste il est possible de passer de

$ cat lignes
1: c1 c2 c3 c4 c5
2: c21 c22 c23
3: c31 c32 c33 c34 c35 c36

à

$ cat colonnes
1:      2:      3:
c1      c21     c31
c2      c22     c32
c3      c23     c33
c4              c34
c5              c35
                c36

Il suffit pour cela de :

Créer un fichier correspondant à chaque ligne (d'où le marqueur dd:)

$ cat lignes | grep ^1 | tr ' ' '\n' > colonne1
$ cat lignes | grep ^2 | tr ' ' '\n' > colonne2
...
$ cat lignes | grep ^dd | tr ' ' '\n' > colonnedd

Puis utiliser la commande paste

$ paste colonne1 colonne2 colonne3 ...

Si trop de fichiers colonnedd, passer par un fichier résultat intermédiaire

Je te laisse mettre tout cela dans un script chapeau...
En espérant d'avoir aidé


Cordialement, A+
--
Claudius

Hors ligne

#5 Le 30/06/2009, à 13:48

Totor

Re : [Résolu] Transposition de fichier texte

Voici une solution fonctionnelle mais pas forcément performante :

#!/bin/bash

# lecture du fichier
nbLigne=0
maxLigne=0
while read -a ligne
do
        ((nbLigne++))
        [ ${#ligne[@]} -gt ${maxLigne} ] &&  maxLigne=${#ligne[@]}
        fichier[${nbLigne}]="${ligne[@]}"
done < fichier1.txt

# transposition
for((cptLigne=0;cptLigne<${maxLigne};cptLigne++))
do
        uneLigne="$(for((cptCol=1;cptCol<=nbLigne;cptCol++))
        do
                ligne=(${fichier[${cptCol}]})
                echo -n "${ligne[${cptLigne}]}-"
        done)"

        echo "${uneLigne%-}"
done

Note : j'ai volontairement positionné le "-" comme séparateur de colonne en sortie.
A titre d'exemple :
En entrée :

1 2 3 4 5
6 7 8 9 10
11 12
13 14 25 16 17 18 19
20

En sortie :

1-6-11-13-20
2-7-12-14-
3-8--25-
4-9--16-
5-10--17-
---18-
---19-

Dernière modification par Totor (Le 30/06/2009, à 13:49)


-- Lucid Lynx --

Hors ligne

#6 Le 30/06/2009, à 14:32

iuchiban

Re : [Résolu] Transposition de fichier texte

Re bonjour,

Bon ben en mettant mes petits neurones en marche je me suis pondu ça :

#!/bin/ksh

_FICHIER="/tmp/Alban/Planning_Jobs/_LISTE_JOB.txt"
_FIC_FIN="/tmp/Alban/Planning_Jobs/_LISTE_FIN.txt"

_NB_LIGNES=$(wc -l $_FICHIER | awk '{print $1}')
_COMPTEUR=1
_CHAINE=""

while [ $_COMPTEUR -lt 145 ]
do
  _FIC_TEMP="/tmp/Alban/Planning_Jobs/_LISTE_JOB.txt$_COMPTEUR"
  echo "Traitement de $_FIC_TEMP"
  cat _LISTE_JOB.txt | awk '{print $'$_COMPTEUR'}' > $_FIC_TEMP
  _LONG_TMP=$(wc -l $_FIC_TEMP | awk '{print $1}')
  while [ $_LONG_TMP -gt 1 ]
  do
    sed '$!N;s/\n/ /' $_FIC_TEMP > $_FIC_TEMP"_bis"
    mv $_FIC_TEMP"_bis" $_FIC_TEMP
    _LONG_TMP=$(wc -l $_FIC_TEMP | awk '{print $1}')
  done
  cat $_FIC_TEMP >> $_FIC_FIN
  rm $_FIC_TEMP
  let "_COMPTEUR += 1"
done

Fonctionne sur un fichier avec 119 lignes et 1441 colonnes et le transpose.

Merci à tous pour les idées smile


C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.

Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.

Hors ligne