Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何在单行上打印值_Perl_Sed_Awk - Fatal编程技术网

Perl 如何在单行上打印值

Perl 如何在单行上打印值,perl,sed,awk,Perl,Sed,Awk,我在命令行上有以下查询,我希望输出值显示在一行上,这样我就可以将其提供给我的监控系统,我想知道如何通过perl、sed和awk实现这一点 我的命令行 activemq:query -QQueue=PCA --view QueueSize,ConsumerCount,EnqueueCount,DequeueCount 输出 ConsumerCount = 1 QueueSize = 0 DequeueCount = 148248 EnqueueCount = 148248 设计输出 1 0

我在命令行上有以下查询,我希望输出值显示在一行上,这样我就可以将其提供给我的监控系统,我想知道如何通过perl、sed和awk实现这一点

我的命令行

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

ConsumerCount = 1
QueueSize = 0
DequeueCount = 148248
EnqueueCount = 148248
设计输出

1 0 148248 148248
谢谢

将其传送到awk:

... | awk -F= '{printf "%s",$2}'
输出,根据需要:

1 0 148248 148248
将其输送至awk:

... | awk -F= '{printf "%s",$2}'
输出,根据需要:

1 0 148248 148248
Perl版本:

... | perl -l40 -ane 'print $F[2]'
或(Perl 5.8.8)


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

... | perl -l40 -ane 'print $F[2]'
或(Perl 5.8.8)


注意:,“split()在标量或void上下文中调用时不再修改@uu”,因此第二个版本不适用于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 

使用命令行开关很有趣:

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

-a
在空白处自动拆分行,并由此拆分换行符。我们添加一个空格并打印最后一个字段。

使用命令行开关很有趣:

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

-a
在空白处自动拆分行,并由此拆分换行符。我们添加一个空格并打印最后一个字段。

这里是另一个字段。继续在数组中推送值,并在最后打印整个数组。这将在末尾为您提供一个新行

但是,如果您的文件非常大,这将不是理想的。在这种情况下,使用狡猾的一行

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

这是另一个。继续在数组中推送值,并在最后打印整个数组。这将在末尾为您提供一个新行

但是,如果您的文件非常大,这将不是理想的。在这种情况下,使用狡猾的一行

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

比我的好多了+1另一个坏的:
。|cut-d=-f2 | tr-d'\n'
为什么不将此作为替代方案发布?不,为什么发布一个不如awk之美的解决方案:-)非常感谢您的帮助:Dso比我的好得多+1另一个坏的:
。|cut-d=-f2 | tr-d'\n'
为什么不将此作为替代方案发布?不,为什么要发布一个关于awk之美的低劣解决方案:-)非常感谢您的帮助:您的代码仍然不起作用。您应该在发布之前运行它们。在第一种情况下,您需要使用
$F[1]
,因为
@
数组是空的。在第二种情况下,您需要使用
$F[1]
,因为
@F
数组只包含2项。我还建议即使在一行程序中也使用
-w
,因为它会给出重要的警告。@LeeDuhem+1用于split,即使它是不推荐使用的构造
不推荐使用隐式拆分到@u,当我运行第一个时,我在-e行1的void上下文中得到了对拆分的无用使用。在-e第1行、第1行的打印中使用未初始化值。
等。。第二个选项现在可以使用了,因为您删除了
-F=
。如果您的Perl版本允许隐式拆分为
@
,那么第一种方法可能会起作用,但我听说这种情况已经10年了,而且它也被弃用了。如果您想跳过
-a
开关,可以执行
(拆分/=/)[1]
。非常巧妙地使用
-l40
。我花了一段时间才注意到,但实际上它在这个上下文中工作得很好。@TLP自Perl 5.12.0以来,“
split()
在标量或无效上下文中调用时不再修改
@
。”您的代码仍然无法工作。您应该在发布之前运行它们。在第一种情况下,您需要使用
$F[1]
,因为
@
数组是空的。在第二种情况下,您需要使用
$F[1]
,因为
@F
数组只包含2项。我还建议即使在一行程序中也使用
-w
,因为它会给出重要的警告。@LeeDuhem+1用于split,即使它是不推荐使用的构造
不推荐使用隐式拆分到@u,当我运行第一个时,我在-e行1的void上下文中得到了对拆分的无用使用。在-e第1行、第1行的打印中使用未初始化值。
等。。第二个选项现在可以使用了,因为您删除了
-F=
。如果您的Perl版本允许隐式拆分为
@
,那么第一种方法可能会起作用,但我听说这种情况已经10年了,而且它也被弃用了。如果您想跳过
-a
开关,可以执行
(拆分/=/)[1]
。非常巧妙地使用
-l40
。我花了一段时间才注意到,但它实际上在这个上下文中工作得很好。@TLP自Perl 5.12.0以来,“
split()
在标量或无效上下文中调用时不再修改
@
。”