[Shell-script] problème de vide dans colonnes
Résolu/Fermé
A voir également:
- [Shell-script] problème de vide dans colonnes
- Script vidéo youtube - Guide
- Supprimer page word vide - Guide
- Word colonnes indépendantes - Guide
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
- Classic shell windows 11 - Télécharger - Personnalisation
6 réponses
Si ton fichier est pas trop long, peut etre qu'une premiere lecture, avec un `wc` pour compter le nombre de champ par ligne, et dans le cas ou il est de 2, rajouter un caractère en debut pourrait t'aider.
Voir ne recupere le champ que si le nombre de champ (mot en faite) est de 3.
Voir ne recupere le champ que si le nombre de champ (mot en faite) est de 3.
Je viens de m'apercevoir que mon exemple est faux, il faut voir un vide dans la première colonne est cinquième ligne. Donc, pour te répondre je ne pense pas qua cette solution pourrait marcher, les vides sont présents.
Voilà à quoi ressemble l'un des mes fichier (ce n'est qu'une partie)
1 Sta Dist EvAz Phase
2 IMHD 1.53 150.9 Pg
3 IRAZ ... 174.9 Pn
4 IAFJ 1.97 125.9 Pn
5 IPRN 2.22 109.9 Pn
6 DAMV 2.27 127.3 e Pn
7 DAMV ... 127.3 Sg
8 GRMI 2.31 321.0 e Pn
9 IDMV 2.34 127.5 Pn
(la numérotation des lignes n'est pas présente dans le fichier et les pointillés représentent des vides)
En plus, si je veux extraire la colonne 4 avec un {print $4} est bien pour la ligne 6 cela va sortir 'e'.
Voilà à quoi ressemble l'un des mes fichier (ce n'est qu'une partie)
1 Sta Dist EvAz Phase
2 IMHD 1.53 150.9 Pg
3 IRAZ ... 174.9 Pn
4 IAFJ 1.97 125.9 Pn
5 IPRN 2.22 109.9 Pn
6 DAMV 2.27 127.3 e Pn
7 DAMV ... 127.3 Sg
8 GRMI 2.31 321.0 e Pn
9 IDMV 2.34 127.5 Pn
(la numérotation des lignes n'est pas présente dans le fichier et les pointillés représentent des vides)
En plus, si je veux extraire la colonne 4 avec un {print $4} est bien pour la ligne 6 cela va sortir 'e'.
Ahhhhhh flutte ! j'arrive pas à afficher un tableau correctement !
Bon, pour être bref. Ma question est la suivante : peut-on, avec un awk, extraire une colonnes à partir de son en-tête. Par exemple extraire la colonne 'DIST'.
Voilà.
Bon, pour être bref. Ma question est la suivante : peut-on, avec un awk, extraire une colonnes à partir de son en-tête. Par exemple extraire la colonne 'DIST'.
Voilà.
dubcek
Messages postés
18753
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
7 novembre 2024
5 619
17 avril 2007 à 10:02
17 avril 2007 à 10:02
awk possède une variable FS qui définit le séparateur de champ. En définissant FS' ' un seul blanc comme séparateur,
ça pourrait marcher ?
ça pourrait marcher ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
1..Sta........Dist......EvAz.......Phase
2..IMHD....1.53.....150.9.........Pg
3..IRAZ ................174.9.........Pn
4..IAFJ .....1.97 ....125.9.........Pn
5..IPRN ....2.22 ....109.9.........Pn
6..DAMV ...2.27.....127.3...e....Pn
7..DAMV................127.3...e....Sg
8..GRMI.....2.31.....321.0...e....Pn
9..IDMV.....2.34.....127.5.........Pn
Voilà, c'est un peu mieux. Bon, pour le séparateur j'ai déjà essayer est ça ne marche pas. car comme tu peux le voir sur l'exemple, j'ai au début du fichier 4 colonnes (séparées par des espaces) puis parfois une autre colonnes vient se greffer entre deux (cf. la colonne avec les 'e'). Donc le $x ne peut pas marcher est différencier les colonnes par leur séparateur ne marchera pas non plus.
2..IMHD....1.53.....150.9.........Pg
3..IRAZ ................174.9.........Pn
4..IAFJ .....1.97 ....125.9.........Pn
5..IPRN ....2.22 ....109.9.........Pn
6..DAMV ...2.27.....127.3...e....Pn
7..DAMV................127.3...e....Sg
8..GRMI.....2.31.....321.0...e....Pn
9..IDMV.....2.34.....127.5.........Pn
Voilà, c'est un peu mieux. Bon, pour le séparateur j'ai déjà essayer est ça ne marche pas. car comme tu peux le voir sur l'exemple, j'ai au début du fichier 4 colonnes (séparées par des espaces) puis parfois une autre colonnes vient se greffer entre deux (cf. la colonne avec les 'e'). Donc le $x ne peut pas marcher est différencier les colonnes par leur séparateur ne marchera pas non plus.
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
17 avril 2007 à 10:21
17 avril 2007 à 10:21
Salut,
Si ton fichier se présente sous la forme :
Si ton fichier se présente sous la forme :
Sta Dist EvAz Phase IMHD 1.53 150.9 Pg IRAZ 174.9 Pn IAFJ 1.97 125.9 Pn IPRN 2.22 109.9 Pn DAMV 2.27 127.3 e Pn DAMV 127.3 Sg GRMI 2.31 321.0 e Pn IDMV 2.34 127.5 Pntu peux essayer avec cette syntaxe :
awk 'BEGIN {FS="[ \t]+"} {if (NF < 4){print $2} else {print $3}}' plop.txt EvAz 150.9 174.9 125.9 109.9 127.3 127.3 321.0 127.5;-))
J'ai essayer ta méthode et bien que je n'ai pas tout compris à ta ligne de commande je n'est pas l'impression que ce soit ce que je recherche. Je pense que, vu le caractère aléatoire de mes colonnes (cf. voir le tableau au dessus) la solution du {print $x} n'est pas bonne. il faudrait que je puisse identifier la colonne avec le début. la colonne 'DIST' resterait ainsi toujour la colonne 'DIST'.
Voilà, j'espère être assez précis.
Merçi d'essayer de m'aider et si quelqu'un à une autre idée...Bah, je suis preneur ! :)
Voilà, j'espère être assez précis.
Merçi d'essayer de m'aider et si quelqu'un à une autre idée...Bah, je suis preneur ! :)
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
>
phil
17 avril 2007 à 12:08
17 avril 2007 à 12:08
Re-
Fait un Copier/Coller de ton fichier (quelques lignes) en l'encadrant par les balises "Code" (quand tu rédiges ton messages, les boutons au-dessus "G", "I", "S" "Code" et "Liens"), voir à ce sujet le guide d'utilisation), qu'on voit réellement à quoi ressemble ton fichier...
;-))
Fait un Copier/Coller de ton fichier (quelques lignes) en l'encadrant par les balises "Code" (quand tu rédiges ton messages, les boutons au-dessus "G", "I", "S" "Code" et "Liens"), voir à ce sujet le guide d'utilisation), qu'on voit réellement à quoi ressemble ton fichier...
;-))
phil
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
17 avril 2007 à 13:12
17 avril 2007 à 13:12
Voilà :
whaa..c'est vrai que ça marche mieux avec l'option 'code'.
C'est un des fichier que je traite mais parfois dans la colonne 'Dist' il n'y a pas de valeur d'où mon problème.
D'autre part, mais ça ne me gène finalement pas, la colonne où des 'e' apparaissent n'est jamais noté dans l'en-tête et les 'e' ne sont pas toujours présent.
Pour l'instant je suis entrain de tester mon script avec awk + substr mais je ne le maîtrise pas très bien donc j'y vais un peu à tâton.
SOUTHERN IRAN Sta Dist EvAz Phase Date Time TRes GHIR 0.54 1.1 e Pg 2005/01/01 02:14:55.1 -0.5 GHIR 0.54 1.1 e Sg 2005/01/01 02:15:04.3 1.0 BNDS 2.86 96.2 e Pn 2005/01/01 02:15:31.9 0.1 BNDS 2.86 96.2 e Sg 2005/01/01 02:16:14.5 0.3 KRBR 4.00 55.2 e Pn 2005/01/01 02:15:47.6 0.0 MZLS 7.91 243.8 P 2005/01/01 02:16:42.7 0.4 ARSS 8.90 260.2 P 2005/01/01 02:16:56.2 0.2 HILS 9.93 270.5 P 2005/01/01 02:17:08.8 -1.5 TATS 153 228.8 PKPbc 2005/01/01 02:17:37.1 -0.5
whaa..c'est vrai que ça marche mieux avec l'option 'code'.
C'est un des fichier que je traite mais parfois dans la colonne 'Dist' il n'y a pas de valeur d'où mon problème.
D'autre part, mais ça ne me gène finalement pas, la colonne où des 'e' apparaissent n'est jamais noté dans l'en-tête et les 'e' ne sont pas toujours présent.
Pour l'instant je suis entrain de tester mon script avec awk + substr mais je ne le maîtrise pas très bien donc j'y vais un peu à tâton.
phil
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
17 avril 2007 à 13:27
17 avril 2007 à 13:27
Bon ! après un foultitude d'essais j'ai trouvé. J'utilise 'awk' et 'substr' de la façon suivante :
avec : $0 pour prendre la ligne.
8 : la position du début de la ligne à sélectionner.
5 : le nombre de caractères à prendre.
Du coup même si c'est vide la awk le prend quand même.
awk '{print substr($0,8,5)}' toto > titi
avec : $0 pour prendre la ligne.
8 : la position du début de la ligne à sélectionner.
5 : le nombre de caractères à prendre.
Du coup même si c'est vide la awk le prend quand même.
phil
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
17 avril 2007 à 14:49
17 avril 2007 à 14:49
RESOLU