Perl 如何在单行上打印值
我在命令行上有以下查询,我希望输出值显示在一行上,这样我就可以将其提供给我的监控系统,我想知道如何通过perl、sed和awk实现这一点 我的命令行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
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()
在标量或无效上下文中调用时不再修改@
。”