Search code examples
c#regexparsingextractiperf

parsing iperf result


please help to extarct regex result of [SUM]

[ 4] 0.00-10.01 sec 1.32 GBytes 1.13 Gbits/sec sender

[ 4] 0.00-10.01 sec 1.32 GBytes 1.13 Gbits/sec receiver

[ 6] 0.00-10.01 sec 1.56 GBytes 1.34 Gbits/sec sender

[ 6] 0.00-10.01 sec 1.56 GBytes 1.34 Gbits/sec receiver

[ 8] 0.00-10.01 sec 1.52 GBytes 1.31 Gbits/sec sender

[ 8] 0.00-10.01 sec 1.52 GBytes 1.31 Gbits/sec receiver

[ 10] 0.00-10.01 sec 1.29 GBytes 1.11 Gbits/sec sender

[ 10] 0.00-10.01 sec 1.29 GBytes 1.11 Gbits/sec receiver

[SUM] 0.00-10.01 sec 5.70 GBytes 4.89 Gbits/sec sender

[SUM] 0.00-10.01 sec 5.69 GBytes 4.88 Gbits/sec receiver


help to get [SUM] sender and reciver Gbits/sec

last 2 lines - Gbits/sec

for example to get

first = 4.89

second = 4.88

i tried regex - ([SUM].*GBytes )?(Gbits/sec.*receiver) thanks


Solution

  • You have to escape special chars ([, /) in your regex.

    string data = @"
    [ 4] 0.00-10.01 sec 1.32 GBytes 1.13 Gbits/sec sender
    [ 4] 0.00-10.01 sec 1.32 GBytes 1.13 Gbits/sec receiver
    [ 6] 0.00-10.01 sec 1.56 GBytes 1.34 Gbits/sec sender
    [ 6] 0.00-10.01 sec 1.56 GBytes 1.34 Gbits/sec receiver
    [ 8] 0.00-10.01 sec 1.52 GBytes 1.31 Gbits/sec sender
    [ 8] 0.00-10.01 sec 1.52 GBytes 1.31 Gbits/sec receiver
    [ 10] 0.00-10.01 sec 1.29 GBytes 1.11 Gbits/sec sender
    [ 10] 0.00-10.01 sec 1.29 GBytes 1.11 Gbits/sec receiver
    [SUM] 0.00-10.01 sec 5.70 GBytes 4.89 Gbits/sec sender
    [SUM] 0.00-10.01 sec 5.69 GBytes 4.88 Gbits/sec receiver";
    
    var matches = System.Text.RegularExpressions.Regex.Matches(data, @"\[SUM\].*\s(?<rate>[0-9.]+) Gbits\/sec (?<type>sender|receiver)");
    foreach (System.Text.RegularExpressions.Match m in matches)
    {
        Console.WriteLine($"{m.Groups["rate"].Value} {m.Groups["type"].Value}");
    }
    

    Output

    4.89 sender
    4.88 receiver