J'essaie d'écrire un script KSH pour traiter un fichier constitué de paires nom-valeur, dont plusieurs sur chaque ligne.
Le format est :
NAME1 VALUE1,NAME2 VALUE2,NAME3 VALUE3, etc
Supposons que j'écrive :
read l
IFS=","
set -A nvls $l
echo "$nvls[2]"
Cela me donnera la deuxième paire nom-valeur, gentiment et facilement. Maintenant, supposons que la tâche soit étendue pour que les valeurs puissent inclure des virgules. Elles doivent être échappées, comme ceci :
NAME1 VALUE1,NAME2 VALUE2_1\,VALUE2_2,NAME3 VALUE3, etc
Évidemment, mon code ne fonctionne plus, puisque "read" supprime tous les guillemets et le deuxième élément du tableau sera juste "NOM2 VALEUR2_1".
Je suis coincé avec un ancien ksh qui ne dispose pas de "read -A array". J'ai essayé plusieurs astuces avec "read -r" et "eval set -A ....", sans succès. Je ne peux pas utiliser "read nvl1 nvl2 nvl3" pour faire de l'unscaping et du splitting dans read, puisque je ne sais pas à l'avance combien de paires nom-valeur se trouvent dans chaque ligne.
Est-ce que quelqu'un a une astuce utile à me proposer ?
PS Je sais que j'ai déjà fait cela en Perl, Python et même en awk. Cependant, je dois le faire en ksh (... ou mourir en essayant ;)