GNU/Linux >> Linux の 問題 >  >> Linux

Bashスクリプト:コマンド出力の各行を配列内の値に割り当てる方法は?

コマンドを実行すると、10行の出力が得られます。 2-4-6-8-10行目を配列に入れたいのですが。

コマンドを実行するたびに順序が変わるため、これを一度に実行する必要があります。コマンドを実行して2行目を選択してから、もう一度実行して4行目を選択するなどしてみましたが、順序が変わるため、これは機能しません。

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

承認された回答:

readarrayを使用する bashで シェル、およびGNU sed

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

組み込みのreadarray 行を配列に読み込みます。行はプロセス置換から読み取られます。 sed プロセス置換のコマンドは、my_commandから読み取られた1行おきにのみ出力されます (また、sed '1!n;d'と書くこともできます。 、またはsed -n 'n;p'として 標準のsedを使用 。

GNUではsed 、アドレスn~m すべてのmに対応 :行nで始まる行 。これは、標準のsedに対するGNU拡張機能です。 、便宜上。

my_command コマンドは一度だけ呼び出されます。

テスト:

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

Linux
  1. Linuxコマンドの出力を変数に割り当てる方法

  2. コマンドライン引数をBashスクリプトに渡しますか?

  3. Bashの配列から一意の値を取得するにはどうすればよいですか?

  1. LinuxでBASHコマンドライン履歴をクリアする方法

  2. Linux の「スクリプト」コマンドの出力をクリーンアップする方法

  3. 各行を前後に出力するコマンド

  1. コマンドの出力をシェル変数に割り当てる方法は?

  2. BashスクリプトにUnix/Linuxユーザーを追加する方法は?

  3. コマンドライン引数をシェルスクリプトに渡す方法は?