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.
バッシュと組み合わせるプロセスの交換、次のように2つのコマンドの出力を組み合わせることができます。
$ 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