-1
votes

Comment analyser ma sortie bash dans un tableau?

La sortie de ma commande bash est quelque chose comme ça xxx

J'ai besoin d'analyser ces informations dans un tableau avec nom1 étant la valeur de la matrice 1 et Nom2 la valeur de la matrice 2.

J'ai essayé de faire ce qui suit: xxx

donne la sortie suivante: xxx

puis j'ai essayé ceci pour convertir la variable Var1 en une matrice xxx

Cela ne fonctionne pas.

Après avoir mis les résultats dans var1 , j'ai besoin de les convertir en tableau. Comment puis-je faire ça?


0 commentaires

5 Réponses :


1
votes

En supposant qu'aucun des noms ne puisse contenir une nouvelle ligne,

get_names () {
    curl http://localhost:8083/names
}

readarray -a my_array < <(get_names | jq -r '.[]')


0 commentaires

0
votes

Vous pouvez faire du personnage et essayer d'extraire les cordes comme ça, mais ce serait fragile. Au lieu de cela, je vous recommande d'utiliser un outil qui peut analyser JSON tel que JQ:

read -d '\t' -a my_array <<< "$(curl http://localhost:8083/names | jq -r '@tsv')"


2 commentaires

Comment puis-je accéder à ces éléments individuellement?


@Karthickganesan my_array est maintenant un Array :: echo "$ {my_array [0]}" , echo "$ {my_array [1]}" etc. pour des éléments individuels.



0
votes

Ceci a fonctionné pour moi xxx

sortie xxx

IHTH


3 commentaires

Le ["nom 1", .... "Nom-in"]. La sortie va varier. Dans ce cas, que dois-je faire? Pour les mettre dans un tableau quel que soit leur compte. Le comte est dynamique


Vous avez écrit " J'ai besoin de les convertir en tableau. ", tant que var1 contient toutes les valeurs dont vous avez besoin, vous pouvez alors accéder au compte avec ECHO "$ {# my_array [@]}" et référence des éléments individuels tels que i = $ ($ {# my_array [@)} -); echo "$ {my_array [$ i]}" . Si vous avez d'autres questions sur cette technique, veuillez poster une nouvelle question qui inclut le code qui ne fonctionne pas, un ensemble de données qui couvre votre problème, la sortie requise à partir de ces données et de votre sortie actuelle à partir de votre code et de tous les messages d'erreur. qui apparaissent (texte réel, pas seulement "ça ne marche pas"). s'il te plaît. Bonne chance.


Hmm, correction sur l'utilisation d'indices avec des tableaux: i = $ {# my_array [@]}; echo "i = $ i"; (( je-- )) ; echo "i = $ i"; echo $ {my_array [$ i]}



1
votes

Pour être sûr avec des valeurs contenant des caractères spéciaux (nouvelles lignes, onglets ...) et l'analyse de la réponse de votre serveur avec JQ code>. Vous pouvez utiliser une sortie délimitée NULL:

#!/usr/bin/env bash

get_names() {
  curl http://localhost:8083/hames
}

# fill my_array from null delimited values returned by jq
mapfile -d '' my_array < <(
  get_names |
    jq --join-output '.[]+"\u0000"' # output null delimited array values
)

# debug print my_array values
for i in "${!my_array[@]}"; do
  printf 'my_array[%d]=%q\n' "$i" "${my_array[$i]}"
done


2 commentaires

Obtenu l'erreur suivante lors de l'exécution du fichier de script MapFile: -A: Option non valide MapFile: Utilisation: MapFile [-N Count] [-O Origine] [-S Nombre] [-T] [-C] [-C rappel] [-C rappel] [ -c quantum] [tableau]


Il n'y a pas de mapfile -a dans mon script ci-dessus. Peut-être que c'était destiné à la réponse de quelqu'un d'autre



0
votes

Vous pouvez également essayer l'approche ci-dessous: xxx

ici, remplacer echo '["nom1", "nom2"]' avec echo $ var1 , il serait donc comme: xxx


2 commentaires

Le ["nom 1", .... "Nom-in"]. La sortie va varier. Dans ce cas, que dois-je faire? Pour les mettre dans un tableau quel que soit leur compte.


Toutes les valeurs doivent être disponibles dans le tableau nommé ARR. Vous pouvez itérer le tableau comme indiqué ci-dessus. Tu sais ce que je veux dire; pour i dans "$ {arr [@ @]}"; faire écho $ i; Fini