2014-04-10 24 views
1

我在命令行上有以下查詢,我希望輸出值顯示在單行上,這樣我就可以將它輸入到監視系統,我想知道如何才能經由任一Perl中,sed的實現這一點,在awk如何在單行上打印值

我的命令行

activemq:query -QQueue=PCA --view QueueSize,ConsumerCount,EnqueueCount,DequeueCount 

輸出

ConsumerCount = 1 
QueueSize = 0 
DequeueCount = 148248 
EnqueueCount = 148248 

Desierd輸出

1 0 148248 148248 

謝謝

回答

2

管它AWK:

... | awk -F= '{printf "%s",$2}' 

輸出,如期望:

1 0 148248 148248 
+0

好多了,那麼我的。 +1另一個破碎的:'... | cut -d = -f2 | tr -d'\ n'' –

+0

爲什麼不把它作爲替代品發佈? – hek2mgl

+0

恩,爲什麼發佈劣質解決方案awk的美麗:-) –

2

Perl版本:

... | perl -l40 -ane 'print $F[2]' 

或(Perl的5.8。 8)

... | perl -ne 'chomp; split /=/; print $_[1]' 

注:Since Perl 5.12.0「分裂()不再修改@_在標量或無效的情況下調用時」,所以第二版本將不會對Perl> = 5.12.0工作,但第一個版本應該仍然有效。

測試:

$ cat t00.txt 
ConsumerCount = 1 
QueueSize = 0 
DequeueCount = 148248 
EnqueueCount = 148248 

$ cat t00.txt | perl -ne 'chomp; split /=/; print $_[1]' 
1 0 148248 148248 

$ cat t00.txt | perl -l40 -ane 'print $F[2]' 
1 0 148248 148248 
+0

您可能打算使用'@ F'而不是'@ _'。 – TLP

+0

@TLP是的,只是想出如何使用'-l'選項。 –

+2

您的代碼仍然無法使用。發佈前您應該運行它們。在第一種情況下,你需要使用'$ F [1]',因爲'@ _'數組是空的。在第二種情況下,您需要使用'$ F [1]',因爲'@ F'數組只包含2個項目。我也推薦使用'-w',即使是單行的,因爲它提供了重要的警告。 – TLP

5

使用命令行開關的樂趣:

perl -anwe'print "$F[2] "' 

-a autosplits上的空白行,並且也由此條換行符。我們添加一個空格並打印最後一個字段。

2

這是另一個。保持將值推入數組中,並在最後打印整個數組。這給了你最後一條新線。

但是,如果您的文件非常龐大,這將不會很理想。在這種情況下,請與TLP's狡猾的單線。

... | perl -lane 'push @a, $F[2] }{ print "@a"'