コマンドを実行すると、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
から読み取られた2行ごとにのみ出力します(また、sed '1!n;d'
として、またはsed -n 'n;p'
として標準sed
)。
GNU sed
では、アドレスn~m
はm
から始まるn
:th行ごとにアドレスします。これは= GNU便宜上、標準sed
への拡張。
my_command
コマンドは、一度だけ呼び出されます。
テスト:
$ readarray -t my_array < <( seq 10 | sed '1~2d' )
$ printf '%s\n' "${my_array[@]}"
2
4
6
8
10