GNU/Linux >> Znalost Linux >  >> Linux

Bash Script:Jak přiřadit každý řádek výstupu příkazu k hodnotám v poli?

Při spuštění příkazu dostanu 10 řádků výstupu. Chci vzít řádky 2-4-6-8-10 a vložit je do pole.

Pokaždé, když spustím svůj příkaz, pořadí se změní, takže to musím udělat najednou. Zkoušel jsem spustit svůj příkaz a vybrat řádek 2, pak znovu spustit a vybrat řádek 4 atd., ale protože se pořadí mění, nefunguje to:

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}")

Přijatá odpověď:

Pomocí readarray v bash shell a GNU sed :

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

Vestavěné readarray přečte řádky do pole. Řádky jsou čteny ze substituce procesu. sed příkaz v substituci procesu vypíše pouze každý druhý řádek přečtený z my_command (a může být také napsáno sed '1!n;d' , nebo jako sed -n 'n;p' se standardním sed ).

V GNU sed , adresu n~m adresy každých m :-tý řádek začínající na řádku n . Toto je GNU rozšíření standardního sed , pro pohodlí.

my_command příkaz bude vždy volán pouze jednou.

Testování:

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

Linux
  1. Jak přiřadit výstup příkazu proměnné shellu?

  2. Jak přidat uživatele Unix/linux do skriptu Bash?

  3. Předat argumenty příkazového řádku skriptu Bash?

  1. Jak analyzovat každý řádek textového souboru jako argument příkazu?

  2. Jak v Bash přidám řetězec za každý řádek v souboru?

  3. Jak mohu získat jedinečné hodnoty z pole v Bash?

  1. bash skript připojí text k prvnímu řádku souboru

  2. Jak uložit výstup příkazu do pole v Ansible?

  3. Příkaz pro výstup každého řádku dopředu a poté zpět