http://qs321.pair.com?node_id=257290

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

I am attempting, to use perl to place text onto new lines. I have a tab delimited file which looks similar to this.

John Smith 25 May 2003 <job>Manager Clean-up
John Smith 25 May 2003 <job>Manager Clean-up <job>Manager Books
John Smith 25 May 2003 <job>Manager Clean-up <job>Manager Books <job>Manager Acounts

What I am trying to do is, where a 2nd, 3rd or more <job> appears, I want to place it onto a new line, but with the text up to the date with the information. The final output would look something like this.

John Smith 25 May 2003 <job>Manager Clean-up
John Smith 25 May 2003 <job>Manager Clean-up
John Smith 25 May 2003 <job>Manager Books

Can anybody help?

#!/usr/bin/perl -w use strict; open (INPUT, "jobs.txt"); open (OUTPUT, ">newjobs.txt"); while ( <INPUT> ) { my $TheLine = $_; while ($TheLine=~ [^\n]*##citation##[^\n]*##citation##[^\n]*##cita +tion##[^\n]*/i) { $TheLine=~ /([^\n]*)##citation##([^\n]*)##citation##([^\n]*)##cita +tion##([^\n]*)/$1\t$2\n$1\t$3\n$1\t$4/i; } while ($TheLine=~ /[^\n]*##citation##[^\n]*##citation##[^\n]*/i) { $TheLine=~ s/([^\n]*)##citation##([^\n]*)##citation##([^\n]*)/$1\t +$2\n$1\t$3/i; } print OUTPUT "$TheLine"; } close INPUT; close OUTPUT;