如何合并代码以使输出在同一行上?

时间:2018-10-01 15:58:38

标签: perl unix

您能帮我将这两个程序结合起来,以两行显示输出吗?第一列是$1,第二列是$2

请帮助我解决此问题。谢谢:)

这是我的代码1。

#!/usr/local/bin/perl
#!/usr/bin/perl

use strict ;
use warnings ;
use IO::Uncompress::Gunzip qw(gunzip $GunzipError);

my $input = "par_disp_fabric.all_max_lowvcc_qor.rpt.gz";
my $output = "par_disp_fabric.all_max_lowvcc_qor.txt";


gunzip $input => $output
  or die "gunzip failed: $GunzipError\n";

open (FILE, '<',"$output") or die "Cannot open $output\n";

while (<FILE>) {
  my $line = $_;
  chomp ($line);

  if ($line=~ m/^\s+Timing Path Group \'(\S+)\'/) {
    $line = $1;
    print ("$1\n");
  }
}

close (FILE);

这是我的代码2。

my $input = "par_disp_fabric.all_max_lowvcc_qor.rpt.gz";
my $output = "par_disp_fabric.all_max_lowvcc_qor.txt";

gunzip $input => $output
  or die "gunzip failed: $GunzipError\n";

open (FILE, '<',"$output") or die "Cannot open $output\n";

while (<FILE>) {
  my $line = $_;
  chomp ($line);

  if ($line=~ m/^\s+Levels of Logic:\s+(\S+)/) {
     $line = $1;
     print ("$1\n");
  }
}

close (FILE);

这是代码1的输出,其中包含26行数据:

**async_default**
**clock_gating_default**
Ddia_link_clk
Ddib_link_clk
Ddic_link_clk
Ddid_link_clk
FEEDTHROUGH
INPUTS
Lclk
OUTPUTS
VISA_HIP_visa_tcss_2000
ckpll_npk_npkclk
clstr_fscan_scanclk_pulsegen
clstr_fscan_scanclk_pulsegen_notdiv
clstr_fscan_scanclk_wavegen
idvfreqA
idvfreqB
psf5_primclk
sb_nondet4tclk
sb_nondetl2tclk
sb_nondett2lclk
sbclk_nondet
sbclk_sa_det
stfclk_scan
tap4tclk
tapclk

输出代码1也具有相同的行数。

3 个答案:

答案 0 :(得分:1)

paste <(perl script1.pl) <(perl script2.pl) 对此很有用:假设您的shell是bash,然后使用process substitutions

column

发出由制表符分隔的列。对于更漂亮的输出,您可以将粘贴的输出通过管道传递到paste <(perl script1.pl) <(perl script2.pl) | column -t -s $'\t'

select a.unique_id as franchise_id, b.unique_id, b.name
from test as a
left join test as b
on b.franchise_id = a.id
where b.unique_id = 'CL1005'

因此,您无需尝试“合并”您的perl程序。

答案 1 :(得分:1)

要组合这两个脚本并在同一行上输出两个数据项,您需要按住直到文件末尾(或直到您拥有两个数据项),然后立即输出它们。因此,您需要将两个循环合并为一个:

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolderHead" runat="Server">
    <script src="../scripts/jquery-1.9.1.min.js"></script>
    <script>
        function onDDLChange() {
            var selectedVal = document.getElementById('<%=ddl1.ClientID%>').value;
            var selectedTxt = document.getElementById('<%=ddl1.ClientID%>').options[selectedVal].text;
            console.log(selectedTxt);
            document.getElementById('<%=tb1.ClientID%>').value = selectedTxt;
        }
    </script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolderBody" runat="Server">
    <asp:DropDownList runat="server" ID="ddl1" onchange="onDDLChange();">
        <asp:ListItem Text="" Value=""></asp:ListItem>
        <asp:ListItem Text="one" Value="1"></asp:ListItem>
        <asp:ListItem Text="two" Value="2"></asp:ListItem>
    </asp:DropDownList>

    <asp:TextBox runat="server" ID="tb1"></asp:TextBox>
</asp:Content>

答案 2 :(得分:1)

您仍然没有给我们提供至关重要的信息-输入数据是什么样的。最重要的是,您要寻找的两条信息是否在同一行?

[更新::仔细查看您的正则表达式,我发现两条信息可能在同一行上-因为它们都应该是该行的第一项。如果您对问题的理解较为清楚,这将很有帮助。]

我认为,无论您的问题的答案是什么,这都将做对事情。我还添加了我对your previous question的回答中建议的改进:

#!/usr/bin/perl

use strict ;
use warnings ;
use IO::Uncompress::Gunzip qw(gunzip $GunzipError);

my $zipped   = "par_disp_fabric.all_max_lowvcc_qor.rpt.gz";
my $unzipped = "par_disp_fabric.all_max_lowvcc_qor.txt";

gunzip $zipped => $unzipped
    or die "gunzip failed: $GunzipError\n";

open (my $fh, '<', $unzipped) or die "Cannot open '$unzipped': $!\n";

my ($levels, $timing);

while (<$fh>) {
    chomp;

    if (m/^\s+Levels of Logic:\s+(\S+)/) {
        $levels = $1;
    }
    if (m/^\s+Timing Path Group \'(\S+)\'/) {
        $timing = $1;
    }

    # If we have both values, then print them out and
    # set the variables to 'undef' for the next iteration
    if ($levels and $timing) {
        print "$levels, $timing\n";
        undef $levels;
        undef $timing;
    }
}

close ($fh);