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