awk v shellu vs perlu

Dan Lukes dan at obluda.cz
Wed Jul 13 08:47:21 CEST 2016


On 13.7.2016 0:30, Milan Cizek wrote:
> asi je to OT, ale nemůžu dohledat příčinu rozdílného chování tohoto příkazu:

Teda, kdyz uz v ramci te radky volam 'sed' tak bych to vyresil cele v 
nem. Bylo by mi lito pameti i procesoru na volani awk:

> df -T | sed '1d;s/^[^ ]*  *\([^ ]*\)  *\([^ ]*  *\)\{4\}\([^ ]*\)  */\1|\3/;'

Regularni vyrazy obecne nejsou moc citelny, ale ve skutecnosti je to jen 
nekolik opakovani stale stejneho popisu formatu jednoho sloupce vystupu 
- no a pak vyrazeni tech, ktere chci.

Ovsem, pokdu se to cele ma volat z PERLu, tak by mi bylo lito volat i 
ten 'sed' a zrejme bych skoncil na necem takovem:

> open(DAT,"/bin/df -T |") || die "Could not open the file";
> while(<DAT>){
>     next if $. < 2; # Skip first line
>     my @line = split;
>     print "$line[1]|$line[6]\n";
> }
> close(DAT);

Na to ses ale neptal ...

> df -T | sed 1d | awk '{gsub(/\s+$/, //, $7) $7; print $2 "|" $7}'
> dělá přesně co chci

> Jakmile to ale dám do perlu, pak mi tam ty mezery za $7 zůstávají... :(
> my @df = `df -T | sed 1d | awk '{gsub(/\\s+\$/, //, \$7) \$7; print \$2 "|"
> \$7}'`;
> print Dumper(\@df);

Me ne - a predpokladam, ze ani tobe ne, ze jen spatne koukas. To co na 
konci "prebyva" neni mesera, ale znak konce radku. Ktery tam byl i kdyz 
to nebylo v perlu.

Nemam perl rad a nejsem s nim kamarad, tak ti nereknu jak ho presvedcit, 
aby se spravne vyporadal s koncema radku. Ale pokud v perlu pises, tak 
to urcite zvladnes sam.


Dan





More information about the Users-l mailing list