GNU/Linux >> Tutoriels Linux >  >> Linux

Script Bash :comment affecter chaque sortie de ligne de commande à des valeurs dans un tableau ?

Lors de l'exécution d'une commande, j'obtiens 10 lignes de sortie. Je veux prendre les lignes 2-4-6-8-10 et les mettre dans un tableau.

Chaque fois que j'exécute ma commande, l'ordre change, je dois donc le faire en une seule fois. J'avais essayé d'exécuter ma commande et de sélectionner la ligne 2, puis de relancer et de sélectionner la ligne 4, etc., mais comme l'ordre change, cela ne fonctionne pas :

value1=$(my_command |sed '2q;d')
value2=$(my_command |sed '4q;d')
value3=$(my_command |sed '6q;d')
value4=$(my_command |sed '8q;d')
value5=$(my_command |sed '10q;d')

MY_ARRAY=("${value1}" "${value2}" "${value3}" "${value4}" "${value5}")

Réponse acceptée :

Utilisation de readarray dans le bash shell et GNU sed :

readarray -t my_array < <( my_command | sed '1~2d' )

Le readarray intégré lit les lignes dans un tableau. Les lignes sont lues à partir d'une substitution de processus. Le sed la commande dans la substitution de processus n'affichera qu'une ligne sur deux lue à partir de my_command (et pourrait aussi s'écrire sed '1!n;d' , ou comme sed -n 'n;p' avec sed standard ).

Dans GNU sed , l'adresse n~m adresses tous les m :ème ligne commençant à la ligne n . Il s'agit d'une extension GNU du standard sed , pour plus de commodité.

Le my_command la commande ne sera appelée qu'une seule fois.

Test :

$ readarray -t my_array < <( seq 10 | sed '1~2d' )
$ printf '%s\n' "${my_array[@]}"
2
4
6
8
10

Linux
  1. Comment ajouter un utilisateur Unix/linux dans un script bash ?

  2. Comment passer un argument de ligne de commande dans un script shell ?

  3. Comment créer un tableau d'éléments uniques à partir d'une chaîne/tableau dans Bash ?

  4. Comment savoir si la sortie d'une commande ou d'un script shell est Stdout ou Stderr ?

  5. Comment puis-je obtenir des valeurs uniques à partir d'un tableau dans Bash ?

Comment effacer l'historique de la ligne de commande BASH sous Linux

Comment afficher l'historique de Bash sans numéros de ligne

Comment supprimer des lignes d'un fichier à l'aide de la commande Sed

script bash ajoute du texte à la première ligne d'un fichier

Comment nettoyer la sortie de la commande Linux 'script'

Comment modifier les lignes précédentes dans une commande à plusieurs lignes dans Bash ?