in reply to Parsing a Pipe delimied file

Can i identify tis pattern (.*|)3 times and have a \n inserted after that?

You haven't mentioned how large the file is.  If it fits into memory, you can read the file into a string and then do

while ($s =~ /(.*?)\|(.*?)\|(.*?)\|/g) { print "$1\t$2\t$3\n"; }

or, if you want to keep the pipe symbols as is

while ($s =~ /((?:.*?\|){3})/g) { print "$1\n"; }

In case the file is huge, you can do instead

local $/ = "|"; # set input record separator while (<>) { print $_, scalar <>, scalar <>, "\n"; }

(requires that you have multiples of 3 number of "...|" items (when using <>) — otherwise you'd have to test for eof in between reading the records)

Update: or simply use the modulus operator (%) to insert a \n after every 3 records:

local $/ = "|"; while (<>) { print; print "\n" unless $. % 3; }