[Shell] boucle sur champs de fichiers

Fermé
Deeper - 2 janv. 2012 à 11:32
 Deeper - 2 janv. 2012 à 18:07
Bonjour et meilleurs voeux à tous,

Voici mon problème

J'ai un fichier texte contenant les infos suivantes (dossier, priorite, lettre, papier, timbre) :
123;10;AAAA;-;-
123;5;BBBB;XXXX;-
123;2;-;CCCC;DDDD

Au final je souhaiterais avoir dans des variables en fonction de la priorité
Dossier : 123
champ1 : AAAA (prioritaire par rapport à BBBB)
champ2 : XXXX (prioritaire par rapport à CCCC)
champ3 : DDDD

le fichier étant classé par ordre de priorité décroissante, j'ai fat la fonction suivante
qui est appelée par test_consommable nom_du_champ num_colonne_du_champ
et qui permet de vérifier si la valeur est déjà affectée ou pas (-)
ex : test_consommable lettre 3

function test_consommable
{
Valeur_champ='echo $ligne |cut -f$2 -d\;'
Param='eval echo $1'
if [ "${Valeur_champ}" = "-" ]
then
$1=${Valeur_champ}
fi
}
mais ça me retourne
Dossier : 123
champ1 : AAAA
champ2 : -
champ3 : -
qui est l'affectation hors fonction de la première ligne

Si le test = "-" fonctionne, en revanche, il ne prend pas en compte le $1=${Valeur_champ}
Quelqu'un peut-il m'aider ?

Merci d'avance

Arnaud
A voir également:

2 réponses

Utilisateur anonyme
2 janv. 2012 à 14:37
salut,

Je ne sais pas si c'est dans le fichier original, ou si c'est apparu à la recopie sur le forum, mais il y a des espaces en fin de lignes qui ne permettent pas de faire correspondre un simple tiret.

Le code doit-il être portable, ou bien peut-il être en bash ?
pour du portable, ça devrait être
Param=$(eval echo \$$1)

pour du bash
Param="${!1}"
0
Yes, ça marche avec Param=$(eval echo \$$1)
Merci beaucoup qqchquicommenceparQ !
0