A voir également:
- Resultat awk dans un tableau
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Comment faire un tableau - Guide
- Identifier un tableau à partir d'une photo - Forum Graphisme
- Comment imprimer un tableau excel sur une seule page - Guide
11 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
14 avril 2010 à 09:43
14 avril 2010 à 09:43
Salut,
Bien que "awk" gère les tableaux (à 2 dimensions) en natif aussi ;-))
[tmpfs]$ cat plop 16 25 21 16 33 25 12 14 28 34 18 [tmpfs]$ awk '{ print $1 }' plop 16 25 21 16 33 25 12 14 28 34 18 [tmpfs]$ TABLE=( $(awk '{ print $1 }' plop) ) [tmpfs]$ echo ${TABLE[0]} 16 [tmpfs]$ echo ${TABLE[2]} 21 [tmpfs]$ echo ${TABLE[6]} 12 [tmpfs]$ echo ${TABLE[@]} 16 25 21 16 33 25 12 14 28 34 18 [tmpfs]$ echo ${#TABLE[@]} 11 [tmpfs]$
Bien que "awk" gère les tableaux (à 2 dimensions) en natif aussi ;-))
Justement je voudrai éviter la créer un fichier !!
Avec le cat tu crée justement le fichier que je veux éviter.
Est-ce possible sans le cat?
Avec le cat tu crée justement le fichier que je veux éviter.
Est-ce possible sans le cat?
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
14 avril 2010 à 10:04
14 avril 2010 à 10:04
Le cat c'est un exemple (il représente ton fichier de départ que je n'ai pas sous la main), donc ce qui importe c'est la variable qui récupère le tableau.
Oui certe cela je l'ai compris
Mais mon fichier n'est pas organiser de la façon suivante:
16
25
21
16
33
25
12
14
28
34
18
C'est juste le résultat de la commande awk qui m'indique le nombre de champs que possède le fichier que je traite.
Mais mon fichier n'est pas organiser de la façon suivante:
16
25
21
16
33
25
12
14
28
34
18
C'est juste le résultat de la commande awk qui m'indique le nombre de champs que possède le fichier que je traite.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
Modifié par jipicy le 14/04/2010 à 10:23
Modifié par jipicy le 14/04/2010 à 10:23
Oui certe cela je l'ai compris
Ben non tu n'as pas compris ;-(
Je n'ai pas ton fichier de départ, donc j'en ai créé un (plop) avec juste les données nécessaires à récupérer (vu que je n'ai pas le source original) pour te montrer comment exploiter le résultat de la commande "awk" en le récupérant dans une variable (TABLE)...
Si tu préfères :
C'est plus clair ?
Ben non tu n'as pas compris ;-(
Je n'ai pas ton fichier de départ, donc j'en ai créé un (plop) avec juste les données nécessaires à récupérer (vu que je n'ai pas le source original) pour te montrer comment exploiter le résultat de la commande "awk" en le récupérant dans une variable (TABLE)...
Si tu préfères :
TABLE=( $(awk 'BEGIN{ FS=";" }{ print NF-1 }' $FileName) )
C'est plus clair ?
Ce que tu explique c'est déjà ce que je faisai avant.
Mais lorsque je fais TABLE=$( (awk 'BEGIN{ FS=";" }{ print NF-1 }' $FileName) )
alors toutes les valeurs sont dans TABLE[O]
et dans TABLE[1] par exemple je n'ai rien.
A part en créant un nouveau fichier je n'ai pas trouver le moyen pour le moment.
Mais lorsque je fais TABLE=$( (awk 'BEGIN{ FS=";" }{ print NF-1 }' $FileName) )
alors toutes les valeurs sont dans TABLE[O]
et dans TABLE[1] par exemple je n'ai rien.
A part en créant un nouveau fichier je n'ai pas trouver le moyen pour le moment.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
14 avril 2010 à 10:31
14 avril 2010 à 10:31
Tu peux copier/coller un bout de ton fichier source ($FileName), s'il te plaît ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
c'est un fichier excel organiser de tel façon:
date|nomFichier|date1|date2|...
tout ça sur 803 lignes pour ce fichier.
Chaque ligne n'a pas le meme nombre de date c'est pour cela que je veux récuperer le nombre de champs par ligne pour éxécuter des requêtes plus facilement.
date|nomFichier|date1|date2|...
tout ça sur 803 lignes pour ce fichier.
Chaque ligne n'a pas le meme nombre de date c'est pour cela que je veux récuperer le nombre de champs par ligne pour éxécuter des requêtes plus facilement.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
14 avril 2010 à 10:39
14 avril 2010 à 10:39
Sans le fichier source pour exécuter des tests on ne pourra pas t'aider pour savoir pourquoi ça ne marche pas chez toi ;-\
Mais à priori, je pencherai pour un problème de fin de ligne (fichier windows oblige) ;-((
Voir Conversion retours chariots DOS (CRLF) / UNIX (LF)
Mais à priori, je pencherai pour un problème de fin de ligne (fichier windows oblige) ;-((
Voir Conversion retours chariots DOS (CRLF) / UNIX (LF)
Si ça peut t'aider voilà un bout du fichier excel :
01/01/2009;ST2495;20081219;20081221;20081222;20081223;
02/01/2009;ST2343;20081226;20081228;20081229;20081230;20081231;
03/01/2009;ST2454;20081203;20081222;
04/01/2009;ST2542;20081229;20081230;20081231;20090101;
01/01/2009;ST2495;20081219;20081221;20081222;20081223;
02/01/2009;ST2343;20081226;20081228;20081229;20081230;20081231;
03/01/2009;ST2454;20081203;20081222;
04/01/2009;ST2542;20081229;20081230;20081231;20090101;
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
Modifié par jipicy le 14/04/2010 à 10:51
Modifié par jipicy le 14/04/2010 à 10:51
Affiche le même résultat mais avec un :
cat -A le_fichier
Ah sur chaque fin de ligne il a ^M$ en plus, ce qui doit correspondre au symbole de fin de ligne je suppose.
Je vais voir si en modifiant l'IFS cela va changer quelque chose dans la récupération de données.
Je viens de tester en indiquant avant la commande IFS='^M$' et cela ne change rien.
Dois-je le prendre en compte dans la commande awk ?
Je vais voir si en modifiant l'IFS cela va changer quelque chose dans la récupération de données.
Je viens de tester en indiquant avant la commande IFS='^M$' et cela ne change rien.
Dois-je le prendre en compte dans la commande awk ?
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
14 avril 2010 à 11:09
14 avril 2010 à 11:09
Même avec des ^M$ ça passe :
[tmpfs]$ cat -A romain 01/01/2009;ST2495;20081219;20081221;20081222;20081223;^M$ 02/01/2009;ST2343;20081226;20081228;20081229;20081230;20081231;^M$ 03/01/2009;ST2454;20081203;20081222;^M$ 04/01/2009;ST2542;20081229;20081230;20081231;20090101;^M$ [tmpfs]$ TABLE=( $(awk 'BEGIN{ FS=";" }{ print NF-1 }' romain) ) [tmpfs]$ echo ${TABLE[@]} 6 7 4 6 [tmpfs]$ echo ${TABLE[2]} 4 [tmpfs]$
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
14 avril 2010 à 10:58
14 avril 2010 à 10:58
[tmpfs]$ cat -A romain 01/01/2009;ST2495;20081219;20081221;20081222;20081223;$ 02/01/2009;ST2343;20081226;20081228;20081229;20081230;20081231;$ 03/01/2009;ST2454;20081203;20081222;$ 04/01/2009;ST2542;20081229;20081230;20081231;20090101;$ [tmpfs]$ TABLE=( $(awk 'BEGIN{ FS=";" }{ print NF-1 }' romain) ) [tmpfs]$ echo ${TABLE[@]} 6 7 4 6 [tmpfs]$ echo ${TABLE[2]} 4 [tmpfs]$
;-))
dubcek
Messages postés
18748
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
26 septembre 2024
5 618
14 avril 2010 à 11:00
14 avril 2010 à 11:00
hello
Mais lorsque je fais TABLE=$( (awk 'BEGIN{ FS=";" }{ print NF-1 }' $FileName) )
n'est ce pas plutot : TABLE=($ (awk 'BEGIN{ FS=";" }{ print NF-1 }' $FileName) )
Mais lorsque je fais TABLE=$( (awk 'BEGIN{ FS=";" }{ print NF-1 }' $FileName) )
n'est ce pas plutot : TABLE=($ (awk 'BEGIN{ FS=";" }{ print NF-1 }' $FileName) )
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
14 avril 2010 à 11:03
14 avril 2010 à 11:03
Salut,
Bien vu, merci ;-))
PS. Il a du copier/coller ma syntaxe avant que je ne l'a corrige, désolé ;-(
Bien vu, merci ;-))
PS. Il a du copier/coller ma syntaxe avant que je ne l'a corrige, désolé ;-(
Ok donc il faut que je change chaque fin de ligne et je verrai si cela fonctionne.
Existe t'il une commande pour le faire rapidement pour insérer cette fin de ligne?
car la commande :
sed 's/^M$//' fichier
enlève toute la fin de ligne.
PS: dubcek, les 2 sont équivalents pour ma requete puisque je renvoi un entier.
Existe t'il une commande pour le faire rapidement pour insérer cette fin de ligne?
car la commande :
sed 's/^M$//' fichier
enlève toute la fin de ligne.
PS: dubcek, les 2 sont équivalents pour ma requete puisque je renvoi un entier.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
14 avril 2010 à 11:15
14 avril 2010 à 11:15
Ressaies avec :
TABLE=( $(awk 'BEGIN{ FS=";" }{ print NF-1 }' $FileName) )
Etrange le sed n'arrive pas a modifier la fin de ligne, cela reste '^M'
Et j'avais bien écrit dans le code
TABLE=( $(awk 'BEGIN{ FS=";" }{ print NF-1 }' $FileName) )
Donc peut être que c'est du à la version du système Linux du serveur, ou à autre chose.
Le sed est le seul moyen de modifier la fin de ligne??
En tout cas merci pour les réponses
Et j'avais bien écrit dans le code
TABLE=( $(awk 'BEGIN{ FS=";" }{ print NF-1 }' $FileName) )
Donc peut être que c'est du à la version du système Linux du serveur, ou à autre chose.
Le sed est le seul moyen de modifier la fin de ligne??
En tout cas merci pour les réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
14 avril 2010 à 13:14
14 avril 2010 à 13:14
C'est sensé marcher même avec des ^M (voir message #16)
Au fait le ^M s'obtient avec la combinaison de touche "CTRL V" + "CTRL M"...
Le sed est le seul moyen de modifier la fin de ligne??
Non, il y "dos2unix" (et "unix2dos") qui font ça très bien aussi (voir les man).
Au fait le ^M s'obtient avec la combinaison de touche "CTRL V" + "CTRL M"...
Le sed est le seul moyen de modifier la fin de ligne??
Non, il y "dos2unix" (et "unix2dos") qui font ça très bien aussi (voir les man).
Le dos2unix marche nickel
Par contre TABLE=( $(awk 'BEGIN{ FS=";" }{ print NF-1 }' $FileName) )
ne fonctionne toujours pas comme sur ton exemple.
Je ne comprend pas pourquoi cela répond d'une autre façon.
Entre temps j'ai trouver une autre façon de faire.
Je lis le fichier en enlevant préalablement tout sauf les délimiteurs et je compte leur nombre sur chaque ligne à l'aide d'un compteur.
Par contre TABLE=( $(awk 'BEGIN{ FS=";" }{ print NF-1 }' $FileName) )
ne fonctionne toujours pas comme sur ton exemple.
Je ne comprend pas pourquoi cela répond d'une autre façon.
Entre temps j'ai trouver une autre façon de faire.
Je lis le fichier en enlevant préalablement tout sauf les délimiteurs et je compte leur nombre sur chaque ligne à l'aide d'un compteur.