perl -n0E "map{for(join'|',split/\n/){$r{$2}=$1if/(.*)time: (.*);/}map{s/-/BEFORE/g;s/\+/AFTER/g;s/.*id : (\d+);.*name: \w+;/ IN \1 /;s/[;| ]+/ /g}values%r}split/^.*@;/m;say$_.$r{$_}for sort keys%r" diff-example.txt 2023-01-01 12:00 IN 6109 value: 0 BEFORE status: ? AFTER status: C 2023-01-01 12:03 IN 6109 BEFORE value: 0 BEFORE status: ? AFTER value: 2 AFTER status: CS 2023-01-01 12:05 IN 6109 value: 0 BEFORE status: ? AFTER status: C #### perl -n0E "map{for(join'',split/\n/){$r{$2}=$1if/(.*)time:(.*)/}}split/.*@;/m;say$_.$/.$r{$_}for sort keys%r"