Resultat awk dans un tableau
Romain
-
Romain -
Romain -
Bonjour,
Alors mon souci actuellement est de récuperer les valeurs qui sortent de la commande awk.
La commande que j'effectue est :
- awk 'BEGIN{ FS=";" }{ print NF-1 }' $FileName
Cela me permet de savoir le nombre de champ sur chaque ligne.
Donc cette commande me sort à l'affichage :
16
25
21
16
33
25
12
14
28
34
18
...
Je voudrais justement insérer ses valeurs dans un tableau afin de les traiter.
Je voudrai éviter de créer un fichier.
Est-ce possible?
Alors mon souci actuellement est de récuperer les valeurs qui sortent de la commande awk.
La commande que j'effectue est :
- awk 'BEGIN{ FS=";" }{ print NF-1 }' $FileName
Cela me permet de savoir le nombre de champ sur chaque ligne.
Donc cette commande me sort à l'affichage :
16
25
21
16
33
25
12
14
28
34
18
...
Je voudrais justement insérer ses valeurs dans un tableau afin de les traiter.
Je voudrai éviter de créer un fichier.
Est-ce possible?
A voir également:
- Resultat awk dans un tableau
- Tableau word - Guide
- Trier un tableau excel - Guide
- Tableau ascii - Guide
- Imprimer un tableau excel - Guide
- Resultat foot - Télécharger - Vie quotidienne
11 réponses
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?
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.
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.
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.
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;
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 ?
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]$
[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]$
;-))
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) )
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.
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
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.