2

リモート マシンの /tmp で使用可能なスペースを確認したいと考えています。私のマシンから次のコマンドでそれを行うことができます:

ssh host-name df /tmp |  awk '{ print $4 }' | tail +2`

ITが機能し、次のような出力を提供します:9076656、KB単位の利用可能なスペース

しかし、このコマンドを perl プログラム内に置くと、$4 に初期化されていない値が使用されているというエラー メッセージが表示されます。

連結での初期化されていない値 $4 の使用

これが私がperlコードでそれをやっている方法です:

my $output = `ssh $server df /tmp |  awk '{ print $4 }' | tail +2`;

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

2

問題は、文字通りではなく補間される$4ことを期待するのと同じように、Perl によって補間されることです。$server当面の解決策は、ドル記号をエスケープすることです: \$4. ただし、Brian Agnew が言うように、perl 内で awk を使用して perl が得意とすることを行うのはかなり冗長です。

use strict;
use warnings;
use Data::Dumper;

my @output = `ssh $server df /tmp`;      # capture output in array
@output = map { ( split )[3] } @output;  # take only 4th field
print Dumper \@output;                   # display data

次に、さまざまな配列ツールを使用し@outputて、好みに合わせてトリミングできます。たとえば、スライスと添え字を使用して、ポップ、プッシュ、シフト、シフト解除、スプライスなどです。たとえば、最初の 2 行を除くすべてを取得すると、次のようになります。

print @output[2 .. $#output];

最初の 2 行を削除します。

splice @output, 0, 2;
于 2013-05-29T10:10:17.133 に答える
1

Perl を使用して awk スクリプトを生成することは、Perl のファイルの読み取り、フィールドの解析などの機能を考えると、少し冗長 (かつ重量級) に思えます

于 2013-05-29T09:31:28.960 に答える