The first arg in the split call is a "magic" space -- which means break on one or more whitespace characters (update: for the split to use a "magic" space, it needs to be quoted, not a regex -- thanks and apologies, guys!). The third arg to split says that only 6 pieces should be returned -- that means upon seeing the sixth non-whitespace string, it will ignore all remaining whitespace characters, and the sixth element will contain everything to the end of the string.while (<FILE>) { print join ",", split( " ", $_, 6 ); }
Update: you might need to watch out for lines in the log file that contain commas; in those cases, double-quotes will be needed around each field that contains a comma. (And if any field contains a double-quote, that needs to be escaped by doubling it:
Not hard to do if you split into an array, then loop over the array elements. But you may want to look at a module for that (e.g. Text::xSV). Or you could just delete commas and quotes from the input before doing the split/join. ;)# input: Oct 1 13:23:25 smoothwall-swe3 kernel: Enabling fast FPU save, restor +e and "foo"... done. # should produce as output: Oct,1,13:23:25,smoothwall-swe3,kernel:,"Enabling fast FPU save, restor +e and ""foo""... done."
In reply to Re: perl substitution difficulty
by graff
in thread perl substitution difficulty
by nanouk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |