![Получите имя файловой системы и ее использование с помощью `df -h`](https://rvso.com/image/50563/%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D0%B5%20%D0%B8%D0%BC%D1%8F%20%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%D0%BE%D0%B9%20%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B%20%D0%B8%20%D0%B5%D0%B5%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20%60df%20-h%60.png)
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