2014-04-10 23 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"'