J'essaie d'écrire un petit script bash sur Ubuntu 12.04 et j'ai peu d'expérience. Bizarre petit problème lors de la conversion d’un fichier texte de nombres en tableaux. J'ai besoin de tous les premiers nombres, des secondes, etc. dans son propre tableau car je vais faire des calculs sur des nombres basés sur des colonnes plus que la ligne dont ils proviennent. Toutes les lignes sont 5 entiers séparés par des espaces avec un retour à la fin de chaque ligne. Un tableau multidimensionnel est-il possible dans bash? Je vous remercie!
Voici un script, il va stocker les numéros du fichier texte dans deux tableaux x
et y
comme vous le souhaitez,
#!/bin/bash
nl=$(cat "$1" | wc -l)
declare -a x
declare -a y
for i in $(seq 1 $nl)
do
x[i]="$(cat "$1" | awk -v p="$i" '{if(NR==p) print $1}')"
y[i]="$(cat "$1" | awk -v p="$i" '{if(NR==p) print $2}')"
done
#upto this point all the numbers from first and second column of the file are stored
#into x and y respectively. Following lines will just print them again for you.
for it in $(seq 1 $nl)
do
echo "${x[$it]} ${y[$it]}"
done
N'oubliez pas de donner l'autorisation d'exécution du script.
chmod +x script.sh
tilisation
./script.sh numfile.txt
où j’envisage de sauvegarder le script ci-dessus sous le nom script.sh
et que votre fichier texte contenant des nombres est numfile.txt
. Et les deux sont dans le même répertoire.
Bash ne prend en charge que les tableaux unidimensionnels, bien qu'un peu de ruse permette de simuler des tableaux multidimensionnels.
Ce document contient un exemple de tableau à deux dimensions. http://tldp.org/LDP/abs/html/arrays.html
Je me demande si une autre langue pourrait mieux convenir à votre cas d'utilisation. On dirait que vous étendez les limites de ce que bash peut faire, alors que Python, Perl ou Ruby gèrent facilement cette tâche. J'imagine que l'outil que vous utiliserez pour vos "calculs" ultérieurs déterminera cela dans une grande mesure.