foreach ( @i ) { my @proc = /^ (\w+) # capture username \s+ (\d+) # capture PID \s+\d+\s+\d+\s+ ( # cluster (not capturing) \d{4} # capture %Y | # or \d{2}:\d{2} # capture %H:%M | # or \d{2}:\d{2}:\d{2} # capture %H:%M:%S | # or \w{3}\d{2} # capture %b%d | # or \w{3}\s+\d{2} # capture %b %d ) \s+\S+\s+\S+\s+ # skip 2 columns after the 5th column (.*) # capture the command $/gx; print join ' | ', @proc; print "\n"; }