如何在单行上打印值

时间:2014-04-10 14:51:24

标签: perl sed awk

我在命令行上有以下查询,我希望输出值显示在单行上,这样我就可以将它提供给我的监控系统了,我想知道如何通过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

谢谢

4 个答案:

答案 0 :(得分:5)

使用命令行开关非常有趣:

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

-a autosplits空白行,从而剥离换行符。我们添加一个空格并打印最后一个字段。

答案 1 :(得分:2)

将它管道输入awk:

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

根据需要输出:

1 0 148248 148248

答案 2 :(得分:2)

Perl版本:

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

或(Perl 5.8.8)

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

注意:Since Perl 5.12.0," split()在标量或无效上下文"中调用时不再修改@_,因此第二个版本不适用于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 

答案 3 :(得分:2)

这是另一个。保持在数组中推送值,并在最后打印整个数组。这最终会为你提供一个新线。

但是,如果您的文件非常庞大,这将不太理想。在这种情况下,请使用TLP's狡猾的单行。

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