0

私は必要なものだけを表示する必要があるsolarisホストからのdf出力を持っており、2つの値の間で数学(減算)を行い、その出力を表示したいと考えています。

bash-2.03# df -t /fsystem
/fsystem          (filer:/vol/volname/filesys): 3790340712 blocks 14310983 files
                                  total: 21616671840 blocks 30443110 files
bash-2.03#

期待される出力:

/fsystem  filer:/vol/volname/filesys 16132127

ここで、16132127 は減算の出力です (30443110 - 14310983)。awk スクリプトの 1 行でこれを行うことをお勧めします。

以下のコマンドから必要な値を抽出することはできますが、計算を行って適切な出力を取得することはできません。

bash-2.03# df -t /fsystem | awk '(NR==1){print $1" "$2" "$5}(NR==2){print $4}'

/fsystem (ファイラー:/vol/volname/filesys): 14310983

30443110

bash-2.03#

コマンド出力のフォーマットがすべての人に理解されていない可能性があります。以下の出力が役立つ場合があります

bash-2.03$ df -t /fsystem | awk '{print $1}'

/fsystem

合計:

bash-2.03$ df -t /fsystem | awk '{print $4}'

ブロック

30443110

bash-2.03$ df -t /fsystem | awk '{print $5}'

14310982

ファイル

bash-2.03$

4

5 に答える 5

0
$ awk -v RS= '{gsub(/^\(|\):$/,"",$2); print $1, $2, ($10 - $5)}'
/fsystem filer:/vol/volname/filesys 16132127

名前に (、)、または : がある場合は、FS を設定する代わりに gsub() が必要です。名前にスペースを含めることができる場合、これは機能しません。そのような状況になると、より困難な問題になります。

于 2013-10-12T12:17:04.210 に答える
0

より一般的に

df -t /ptsadmin |
awk -F '[ \t()]+' '/^total:/ { f=$3; next }
    { sub(/:$/,"",$2; d[NR]=$1" "$2; v[NR]=$5}
    END{ for(i=1; i<NR; ++i)
        print d[i] " " v[i]-f }'

()オプションをFS介してに追加すると、-Fそれらが削除されます。からの最後のコロンの削除は、$2によって行われsub()ます。

于 2013-10-12T09:15:00.960 に答える