명령을 실행하면 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}")
답변1
readarray
bash
쉘 및 GNU 에서 사용 sed
:
readarray -t my_array < <( my_command | sed '1~2d' )
내장 함수는 readarray
행을 배열로 읽어 들입니다. 이 줄은 프로세스 대체에서 읽혀집니다. 프로세스 대체 명령은 읽은 (또는 쓰여진 또는 표준으로 ) sed
한 줄씩 걸러서만 출력합니다 .my_command
sed '1!n;d'
sed -n 'n;p'
sed
GNU에서 이 주소는 sed
line에서 시작하는 각 줄을 n~m
지정합니다 . 편의상 이는 표준에 대한 GNU 확장입니다.m
n
sed
이 my_command
명령은 한 번만 호출됩니다.
시험:
$ readarray -t my_array < <( seq 10 | sed '1~2d' )
$ printf '%s\n' "${my_array[@]}"
2
4
6
8
10