Выход AWK в массив bash

Im пытается поместить содержимое простой команды в массив bash, однако у меня есть немного проблем.

df -h | awk '{ print  " " }'

дает процент, используемый в файловых системах в моей системе вывод выглядит следующим образом:

1% /dev
1% /dev/shm
1% /var/run
0% /var/lock
22% /boot
22% /home
22% /home/steve

затем я хотел бы поместить каждую из этих строк в массив bash array=$(df-h| awk '{ print $5 $6 }')

однако, когда я распечатываю массив, я получаю следующее:

5%
/
1%
/dev
1%
/dev/shm
1%
/var/run
0%
/var/lock
22%
/boot
22%
/home
22%
/home/steve

Bash формирует массив на основе белого пробелы, а не разрывы линий, как я могу это исправить?

3 ответов


вам нужно сбросить переменную IFS (делиметр, используемый для массивов).

OIFS=$IFS #save original
IFS=','
df -h | awk '{ print " ""," }'

вы можете сделать это в Bash без awk.

array=()
while read -a line; do
    array+=("${line[4]} ${line[5]}")
done < <(df -h)

вы можете использовать это:

eval array=( $(df -h | awk '{ printf("\"%s %s\" ", , ) }') )