2010/7/10 Adrian Sevcenco <[email protected]>:
> Salut! incerc sa parsez un fisier cu un numar variabil de cimpuri pe
> fiecare linie si sa printez totate cimpurile mai putin ultimele doua...
> incerc sa fac asha :
>
> #! /bin/awk -f
> BEGIN { FS = "-" }
> {
> for (i = 1; i <= (NF - 2) ; i++)
>  print $i
> }
>
> si .. nu merge .. aveti vreo idee?

Ce-mi place mie expresia "nu merge"... NOT!

In cazul tau din cate imi dau seama, "nu merge" inseamna "apar
campurile pe linii separate". Problema ar fi ca print introduce un \n
la sfarsit.

Ai putea cu ceva gen:

awk -F- '{for (i=1; i<(NF-2); i++) {printf "%s%s", $i,FS }; print $(NF-2)}'

(scuzati formatul, eu lucrez cu onelinere ;) ).

Totusi approachul asta are un defect: in cazul in care FS nu e doar un
caracter ci o expresie regulata, n-o sa apara identic ce ramane. Poti
face ceva mai portabil in felul urmator:

sed 's/\(-[^-]*\)\{2\}$//'

Sau cu perl cum a zis zgrim :)

Sau tot cu awk:
awk '{gsub( "-[^-]*-[^-]*$" , ""); print}'

(de ce nu vrea awk sa inteleaga {2} nu stiu si mi-e lene acum sa caut.

Nota: exemplele de awk de mai sus au fost testate cu gawk, nu bag mana
in foc ca merg si in mawk sau nawk.
-- 
Petre.
_______________________________________________
RLUG mailing list
[email protected]
http://lists.lug.ro/mailman/listinfo/rlug

Raspunde prin e-mail lui