Получите имя файловой системы и ее использование с помощью `df -h`

Получите имя файловой системы и ее использование с помощью `df -h`
 df -h | grep test | sed -e 's/*%.^ //g;s/.*[ ^I]//'

Выход:

/тест
/тест/drv0
/тест/drv1
 df -h  | grep test  | cut -d '%' -f1 | sed -e 's/*%.^ //g;s/.*[ ^I]//'

Выход:

10
20
15

Я хочу знать, как я могу объединить эти выходы следующим образом:

/тест 10
/тест/drv0 20
/тест/drv1 15

Кто-нибудь может мне помочь?

решение1

df -P | sed -n '/test/s/.*[[:blank:]]\(.*\)%[[:blank:]]*\(.*\)/\2 \1/p'

(предполагается, что пути точек монтирования не содержат символов % или новой строки)

решение2

Я думаю, что-то вроде этого. Я не понимаю весь вопрос, хотя

df -h | awk '/test/{print $1" "$5}' | sed -e ':a;N;$!ba;s/\n/ /g' -e 's/%//g'

Поскольку вопрос изменился, вот обновленный ответ

df -h | awk '/test/{print $1, +$5}'

решение3

df | awk '/test/ {print $1 " " $5}'

напечатает

/test 10%
/test/drv0 20%
/test/drv1 15%

решение4

Это не лучшее решение для вашей конкретной ситуации (оно работает, но излишне сложно), вам следует использовать уже предоставленные ответы. Я просто хотел упомянуть еще один инструмент, который очень полезен, когда вы хотите объединить вывод нескольких программ paste:

DESCRIPTION
   Write  lines  consisting  of  the sequentially corresponding lines from
   each FILE, separated by TABs, to standard output.   With  no  FILE,  or
   when FILE is -, read standard input.

В сочетании с Башзамена процесса, вы можете объединить вывод двух команд следующим образом:

$ paste  <(df -h | grep test | sed -e 's/*%.^ //g;s/.*[ ^I]//') \
       <(df -h  | grep test  | cut -d '%' -f1 | sed -e 's/*%.^ //g;s/.*[ ^I]//')
 /test 10
 /test/drv0 20
 /test/drv1 15

Или, если использовать более простой пример:

$ paste <(echo -e "a\nb\nc") <(echo -e "1\n2\n3")
a   1
b   2
c   3

Связанный контент