As long as you have a constant number of fields and the only field that can contain spaces is your filename one, the problem can be solved using the third argument to split combined with reverse.
knoppix@Microknoppix:~$ perl -Mstrict -Mwarnings -E ' > my @lines = ( > q{1 2 3 4 5 6 7 8 filename 10 11 12 13 14 15 16 17 18}, > q{1 2 3 4 5 6 7 8 file name 10 11 12 13 14 15 16 17 18}, > q{1 2 3 4 5 6 7 8 new file name 10 11 12 13 14 15 16 17 18}, > ); > > foreach my $line ( @lines ) > { > my @flds = split m{\s+}, $line, 9; > @flds = split m{\s+}, reverse( $flds[ -1 ] ), 10; > my $filename = reverse $flds[ -1 ]; > say qq{>$filename<}; > }' >filename< >file name< >new file name< knoppix@Microknoppix:~$
I hope this is helpful.
Cheers,
JohnGG
In reply to Re: parse a line with varied number of fields
by johngg
in thread parse a line with varied number of fields
by raggmopp
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |