【问题标题】:print n users and their value using perl使用 perl 打印 n 个用户及其值
【发布时间】:2014-07-22 20:21:11
【问题描述】:

我是 perl 新手,需要您的帮助来构建逻辑。

我在一个目录中有 10 个文件,每个文件都有一些数据,如下所示。每个文件包含的行取决于用户数设置。例如,如果有 4 个用户,那么将从服务器打印 4 行。

1405075666889,4044,SOA_breade,200,OK,Thread Group 1-1,text,true,623,4044
1405075666889,4041,SOA_breade,200,OK,Thread Group 1-1,text,true,623,4041
1405075666889,4043,SOA_breade,200,OK,Thread Group 1-1,text,true,623,4043
1405075666889,4045,SOA_breade,200,OK,Thread Group 1-1,text,true,623,4044

我想要一些应该在输出目录中创建单个文件并且该文件应该包含 10 行的逻辑

Min_Value, Max_Value, Avg_Value, User1, User2, User3......User4

以及它们在这种情况下第二行的对应值来自第二列。

Min_Value, Max_Value, Avg_Value, User1, User2, User3......User4
4.041,4.045,4.044,4.041,4.043,4.045
.
.
.
.
.

第10个文件数据

这是我的代码...它正在工作,但是 我不知道如何按顺序打印 user1、user2... 及其对应的值

my @soaTime;
my @soaminTime;
my @soamaxTime;
my @soaavgTime;
my $soadir = $Json_Time;
foreach my $inputfile (glob("$soadir/*Overview*.txt")) {
    open(INFILE, $inputfile) or die("Could not open  file.");
    foreach my $line (<INFILE>)  {

        my @values = split(',', $line); # parse the file
        my $time_ms = $values[1]/1000;
        push (@soaTime, $time_ms);
    }

    my $min = min @soaTime;
    push (@soaminTime, $min);
    print $soaminTime[0];
    my $max = max @soaTime;
    push (@soamaxTime, $max);
    sub mean { return @_ ? sum(@_) / @_ : 0 };
    #print mean(@soaTime);
    push (@soaavgTime, mean());
    close(INFILE);
}

my $outputfile = $report_path."abc.txt";
open (OUTFILE, ">$outputfile");
print OUTFILE ("Min_Value,Max_Value,User1,User2,User3,User4"."\n"); # Prining the data
for (my $count = 0; $count <= $#soaTC; $count++) {
    print     OUTFILE("$soaminTime[0],$soamaxTime[0],$soaTime[0],$soaTime[1],$soaTime[2],$soaTime[3]"."\n"     );           #Prining the data
}
close(OUTFILE);

请帮忙。

【问题讨论】:

  • 欢迎来到 SO。请阅读FAQ 和How to Ask。 StackOverflow 不是一项服务,您可以在其中发布问题并让其他人为您解决问题。您应该自己完成工作,然后当您遇到问题时,就您编写的代码提出具体问题。
  • 嗨,吉姆,感谢您的宝贵意见。我已添加我的代码以供参考
  • 感谢您展示您的代码,但您没有告诉我们您的代码存在的问题。你写的代码有什么问题?它运行吗?它会生成错误格式的文件吗?它会产生一个没有输出的文件吗?很高兴您列出了代码以及您的输入和预期输出,但请告诉我们您的代码存在的具体问题。
  • 您能告诉我们您的数据代表什么吗?这是你的整个程序吗? $Json_time? Do you have use strict;` 和 use warnings; 在你的程序中是什么?

标签: perl


【解决方案1】:

是吗?

use strict;
use List::Util qw( min max );
my $Json_Time="./test";
my $report_path="./out/";
my @soaTime;
my @soaminTime;
my @soamaxTime;
my @soaavgTime;
my @users;
my $maxusers;
my $soadir = $Json_Time;
foreach my $inputfile (glob("$soadir/*Overview*.txt")) {
    open(INFILE, $inputfile) or die("Could not open  file.");
    my $i=0;
    my @m_users;
    my @m_soaTime;
    foreach my $line (<INFILE>)  {
        my @values = split(',', $line); # parse the file
        my $time_ms = $values[1]/1000;
        push (@m_soaTime, $time_ms);
        $i++;
        push(@m_users, "User".$i);
    }
    push(@soaTime,\@m_soaTime);
    if ($maxusers<$#m_users) {
        @users=@m_users;
        $maxusers=$#m_users;
    }
    my $min = min(@m_soaTime);
    push (@soaminTime, $min);
    my $max =max(@m_soaTime);
    push (@soamaxTime, $max);
    sub mean { return @_ ? sum(@_) / @_ : 0 };
    push (@soaavgTime, mean());
    close(INFILE);

}
my $outputfile = $report_path."abc.txt";
open (OUTFILE, ">$outputfile");
print OUTFILE "Min_Value,Max_Value,Avg_Value,".join(',',@users)."\n"; # Prining the data
for (my $count = 0; $count <= $#soaavgTime; $count++) {
    print OUTFILE $soaminTime[$count].","
        .$soamaxTime[$count].","
        .$soaavgTime[$count].","
        .join(',',@{$soaTime[$count]})
        ."\n";           #Prining the data
}
close(OUTFILE);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-10
    • 2014-11-01
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 2023-02-03
    • 2021-11-08
    • 2016-06-13
    相关资源
    最近更新 更多