Cane has asked for the wisdom of the Perl Monks concerning the following question:

How to find data that is on a different line from the search string. Example Data file content:
Timestamp 12:01:03.348 0x014E TNDB -- Result Status: 1 Source: 2 Freq: 50 Slice: 4 Mode: 3 Output: 234.209 Diff: 390.009 Dev: 89.909
Search on 0x014E, the actual data to pull is Output: 234.209

Replies are listed 'Best First'.
Re: Seach for data that is on a different line from the search string
by stevieb (Canon) on Mar 31, 2012 at 02:58 UTC

    If your data file looks like this:

    Timestamp 12:01:03.348 0x014D TNDB -- Result Status: 1 Source: 2 Freq: 50 Slice: 4 Mode: 3 Output: 234.209 Diff: 390.009 Dev: 89.909 Timestamp 12:01:03.348 0x014E TNDB -- Result Status: 1 Source: 2 Freq: 50 Slice: 4 Mode: 3 Output: 234.209 Diff: 390.009 Dev: 89.909

    Then this will work:

    #!/usr/bin/perl use warnings; use strict; use 5.10.0; open my $fh, '<', 'data.txt' or die $!; my $begin = 0; while ( my $line = <$fh> ){ chomp $line; $begin = 1 if $line =~ /0x014E/; next unless $begin; say $line and last if $line =~ /^Output:/; }

    You'll need to paste a couple blocks of your copy/pasted data file into code blocks though. Right below the window you post in describes this clearly

      Another way of doing this:
      use 5.010; $/ = "\n--\n"; while ( defined(my $line = <$fh>) ){ say $1 if $line =~ /\b0x014E\b/ and $line =~ /^(Output: .+)/m; }
Re: Seach for data that is on a different line from the search string
by stevieb (Canon) on Mar 31, 2012 at 02:40 UTC

    EDIT: Scratch this answer... I assumed all data on the same line, completely somehow ignoring the title :) Need to see a sample of the actual data in code blocks to better understand.

    perl -nE 'say $1 if /\b0x014E\b/ && /.*(Output.*?)\s[^\d]/;' data.txt