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.
与bash结合流程替代,您可以像这样组合两个命令的输出:
$ 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