2013-02-27 104 views
0

我用下面的查詢在Linux上獲取服務器負載:如何在perl中實現linux查詢?

w | head -n 1 | awk '{print $12}' 

現在我想通過運行一個Perl腳本的查詢和打印輸出瀏覽器。我怎麼做?

+0

'系統( 「W |頭-n 1 | awk的 '{打印$ 12}'」)' – m0skit0 2013-02-27 11:12:59

+0

我如何捕獲它的輸出? – 2013-02-27 11:19:51

+0

你不需要'head',試試'w | awk'{print $ 12; exit}'' – Kent 2013-02-27 11:24:05

回答

1

你可以簡單地使用反引號捕獲一個shell命令的輸出:

chomp(my $load = `w | head -n 1 | awk '{print \$12}'`); 

$來轉義,否則Perl會嘗試發送命令之前進行插值的變量。

system()是調用外部命令的首選方式,如果你不需要需要輸出。但是,如果您正在編寫的不僅僅是一個快速的實用程序腳本,通常最好將系統命令替換爲等效的Perl代碼。有很多可用的模塊可以複製常用shell命令和任務的功能。

+0

反推作品! – 2013-02-27 11:23:04

0

要在perl中運行系統命令,請參考this

3

以下產卵一個過程,而不是四個:

open(my $pipe, '-|', 'w') or die $!; 
my $line = <$pipe>; 
close($pipe); 
my $load = (split ' ', $line)[11]; 
  • close($pipe)關閉從發送多個輸出停止w管道。
  • split ' ', EXPR將EXPR分割爲空格。
  • (EXPR)[11]得到由EXPR返回的第12個項目。
0

所有這一切需要的是

my $load = (split ' ', `w`, 13)[11];