Portál AbcLinuxu, 12. května 2025 21:34

Dotaz: Volání sedu z awk

9.8.2007 10:16 ZdenekT
Volání sedu z awk
Přečteno: 313×
Odpovědět | Admin
Mám tento problém: Zpracovávám awkáčkem soubor input.txt a výsledky zapisuju do output.txt. Téměř všude si v pohodě vystačím v awk, ale je tam případ, kdy se mi zdá mnohem vhodnější zavolat sed.
Takže to vypadá takto: pokud $0 vyhovuje nějaké podmínce, zpracuj a zapiš do output.txt, pokud ne, pošli sedu, ten ho zpracuje a zapíše tamtéž.

Představuju si to takto: gawk -f program.awk input.txt > output.txt

input.txt
a
b
c
d

program.awk:
if ($0=="c")
system ("echo $0 | sed -f program.sed >> output.txt")
else
print

program.sed:
/s/c/x/

output.txt by měl vypadat takto:
a
b
x
d

ale vypadne toto:
a
b
d

Kde udělali soudruzi z endéer chybu?

Tohle je samozřejmě maximálně zjednodušený příklad, který by se dal řešit úplně jinak, ve skutečnosti je to mnohem složitější. Rady typu "a co radši takhle" můžou bý zajímavé a užitečné, ale tady mi jde spíš o princip. Proč to nefunguje právě takhle? Díky

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

9.8.2007 15:22 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Volání sedu z awk
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jestli to náhodou nebude tím, že každý z těchto programů pracuje s něčím jiným a jinak.Zkus prostudovat tohle o awk a sed na wikibooks.
9.8.2007 16:03 Terka | skóre: 13
Rozbalit Rozbalit vše Re: Volání sedu z awk
Odpovědět | | Sbalit | Link | Blokovat | Admin
co misto 
system ("echo $0 | sed -f program.sed >> output.txt")
dat 
print $0|"sed -f program.sed >> output.txt"
9.8.2007 16:06 Terka | skóre: 13
Rozbalit Rozbalit vše Re: Volání sedu z awk
problem mi ale dela, pokud spoustim z awk dalsi programy a chci aby obsahovaly uvozovky '. napr pro priklad vyse print $0|"sed -f program.sed >> output.txt" print $0|"sed -e 's/a/A/'>> output.txt"
9.8.2007 16:15 Terka | skóre: 13
Rozbalit Rozbalit vše Re: Volání sedu z awk
problem mi ale dela, pokud spoustim z awk dalsi programy a chci aby obsahovaly uvozovky '. napr pro priklad vyse print $0|"sed -f program.sed >> output.txt" print $0|"sed -e 's/a/A/'>> output.txt"
Josef Kufner avatar 9.8.2007 16:58 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Volání sedu z awk
Odpovědět | | Sbalit | Link | Blokovat | Admin
Protože d přepíše x.

Zkus umáznout ">> output.txt". Pak by to mělo jít na stejný stdout jako má awk a korektně se to spojit. Pokud tedy výstup z toho awk máš přesměrovaný do output.txt. Nezapomínej, že otevřené filedeskriptory se dědí také.
Hello world ! Segmentation fault (core dumped)
10.8.2007 13:51 ZdenekT
Rozbalit Rozbalit vše Re: Volání sedu z awk
Odpovědět | | Sbalit | Link | Blokovat | Admin
A sakra! Bodejť by to fungovalo. To měl mozek zase dovolenou! Díky vám za rady.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.