#!/usr/bin/perl -s use strict; our($c,$sl); my $sep =qr{[;]}; $sep =qr{[;,|]} if $c; my $savit_n=0; my %savit_p=(); while(<>){chomp; if(/^(\w\S*\w)\s*=\s*(\S.*)$/){ my ($tag,$val)=($1,$2); $tag =~ s/^(\w\w)[_\-]\w\w$/$1/ if $sl; ## pt_pt pt-pt → pt $val =~ s/(\(.*?\))/_savit($1)/ge; ## proteje (..) [..] {..} $val =~ s/(\[.*?\])/_savit($1)/ge; $val =~ s/(\{.*?\})/_savit($1)/ge; for my $t (split(/\s*$sep\s*/,$val)){ print "$tag = ",_loadit($t),"\n"; }} else{ print "$_\n" ;} } sub _savit{ my $a=shift; $savit_p{++$savit_n}=$a ; " __MARCA__$savit_n " } sub _loadit{ my $a = shift; $a =~ s/ ?__MARCA__(\d+) ?/$savit_p{$1}/g; $savit_n = 0; $a; } __END__ =encoding utf8 =head1 NAME csv-expand - expand "L=v1;..;vn" separated values =head1 SYNOPSIS csv-expand [-c|-sl] file* -c splits by ,;| (def ';') -sl simplify languages (pt_pt → pt) =head1 DESCRIPTION fr = a;(b;c);d is expanded to fr = a fr = (b;c) fr = d csv-expand - expand "Tag=v1;v2;vn" patterns =head1 SYNOPSIS csv-expand [-c|-sl] file* =head1 DESCRIPTION -c --> separator = [,;|] -sl --> simplify language tags (pt_PT --> pt) a file with EN=house; home; building PT=casa is transformed in EN=house EN=home EN=building PT=casa =head1 AUTHOR J.Joao Almeida, jj@di.uminho.pt =cut