首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Perl中分解qx/ return

在Perl中分解qx/ return
EN

Stack Overflow用户
提问于 2017-03-14 01:48:43
回答 2查看 65关注 0票数 1

我有一台Ubuntu 16.04.1服务器,我在上面胡乱摆弄。目前,我正在使用它来监控我的网速和连接。

我已经编写了一个脚本,并使用Perl和crontab将其自动化,但现在我想清理一下我的日志文件。

以下是在执行Perl脚本时写入日志文件的内容:

代码语言:javascript
复制
Time: 12:40:01
Retrieving speedtest.net configuration...
Testing from TWC (now Spectrum) (123.45.67.890)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by Fibrant (Salisbury, NC) [60.95 km]: 51.184 ms
Testing download     speed................................................................................
Download: 37.76 Mbit/s
Testing upload speed....................................................................................................
Upload: 11.56 Mbit/s

相反,我希望输出为:

代码语言:javascript
复制
Download: 37.76 Mbit/s
Upload: 11.56 Mbit/s

我当前的Perl脚本如下所示:

代码语言:javascript
复制
    use strict;
    use warnings;

    my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) = localtime( time );
    my $nice_timestamp = sprintf( "%04d%02d%02d",   $year + 1900, $mon + 1, $mday );
    my $timer          = sprintf( "%02d:%02d:%02d", $hour,        $min,     $sec );
    my $filename = "/home/user/DailyLogs/InternetLog$nice_timestamp";

    open( my $fh, '>>', $filename ) or die "Could not open file '$filename' $!";

    my $output = qx"/home/user/.local/bin/speedtest-cli";

    print $fh "Time: ";
    print $fh $timer;
    print $fh "\n";
    print $fh $output;
    print $fh "\n\n";

    close $fh;

任何帮助都将不胜感激。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-14 01:54:24

您可以使用grep过滤qx输出

代码语言:javascript
复制
my @output = grep {/^(Up|Down)load:/} qx"/home/user/.local/bin/speedtest-cli";
print $fh $_ for @output;

顺便说一句,您可以使用POSIX简化$timer代码

代码语言:javascript
复制
use POSIX qw(strftime);
my @localtime = localtime;
my $nice_timestamp = strftime('%Y%m%d',   @localtime);
my $timer          = strftime('%H:%M:%S', @localtime);
票数 4
EN

Stack Overflow用户

发布于 2017-03-14 02:48:20

如果您将结果赋值给一个数组,Backticks ( qx运算符)将把输出拆分为几行。您可以使用grep选择您想要查看的行

我还将使用Time::Piece模块来生成时间和日期字符串

代码将如下所示

代码语言:javascript
复制
use strict;
use warnings 'all';

use Time::Piece;

my $now = localtime;
$now->date_separator('');
my $nice_timestamp = $now->ymd; # Generates YYYYMMDD

my $filename = "/home/user/DailyLogs/InternetLog$nice_timestamp";

open my $fh, '>>', $filename or die qq{Unable to open file "$filename" for appending: $!};

my @output = qx</home/user/.local/bin/speedtest-cli>;

my $timer = $now->hms; # Generates HH:MM:SS

print $fh "Time: $timer\n";
print $fh for grep /^(?:Down|Up)load/, @output;
print $fh "\n\n";

close $fh;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42770185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档