Portál AbcLinuxu, 12. května 2025 04:44

Dotaz: awk

18.12.2009 17:05 jirikon
awk
Přečteno: 342×
Odpovědět | Admin
Soubor "ga" obsahuje data typu:

A1 COC(=O)C=C

A2 CCOC(=O)C=C

A3 CCCOC(=O)C=C

Jak vytvořit soubory názvu 1.pole s obsahem 2. pole?

Nereseni1:

awk '{system("touch "$1"; echo "$2" > "$1) }' ga

sh: -c: line 0: syntax error near unexpected token `('

sh: -c: line 0: `touch A3; echo CCCOC(=O)C=C > A3'.

Nereseni 2:

awk '{system("touch "$1"; echo '"$2"' > "$1) }' ga

probehne v poradu, ale prazdne soubory.

Nereseni 3:

awk '{system("touch "$1"; echo \'"$2"\' > "$1) }' ga

ceka na dalsi instrukce.

Řešení dotazu:


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

Odpovědi

wamba avatar 18.12.2009 18:00 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: awk
Odpovědět | | Sbalit | Link | Blokovat | Admin
v Awk se moc nevyznám ale experimentem jsem přišel na tohle

awk '{system("echo \""$2"\">"$1) }'
This would have been so hard to fix when you don't know that there is in fact an easy fix.
18.12.2009 18:26 jirikon
Rozbalit Rozbalit vše Re: awk
Tak toto jsem skousel taky, ale asi jsem tam měl jeste jinou chybu, tak to nezafungovalo.

Ted jsem si vzpomel ze je to nejspíš problem echo když je někde vnořené, uz jsem se s tim v minulosti setkal. Kdyby to někdo rozebral proč je v uvozovkach problem, rad bych se poučil.

Diky
18.12.2009 19:19 Marble | skóre: 27 | blog: marble
Rozbalit Rozbalit vše Re: awk

Zhruba následovně: Zaprvé příkaz awk system() očekává jako parametr řetězec dle zvyklostí awk. Retězce se spojují mezerou, výrazy $1 apod už není třeba dávat do uvozovek (viz manuál awk). Tento řetězec musí být zároven platným vstupem pro shell. V tomto případě je třeba hlavně "schovat" závorky z druhého sloupce. Navíc celý program awkčka je v jednoduchých uvozovkách a shell musí potkat první následující jednoduchou uvozovku až na konci celého programu. Pokud by bylo potřeba nacpat znak ' někam doprostřed, musí se budto celý awk kod dát do "" (což je ale dost nepraktické kvůli $), anebo ukončit dočasně ', tj.: 'program '"'"'pokracovani'.

Tedy fungovat bude např.: awk '{system("echo \"" $2 "\">\"" $1 "\"");}' ga

(touch je tam zbytečný, přesměrování si soubor vytvoří)

18.12.2009 18:42 Marble | skóre: 27 | blog: marble
Rozbalit Rozbalit vše Re: awk
Odpovědět | | Sbalit | Link | Blokovat | Admin

Volat kvůli tomu bash (tj. system()) je trochu zbytečné. Asi nejjednodušší řešení (a úplně bez uvozovek :-)) je toto: awk '{print $2>$1;}' ga

Minimálně gawk umí šipkou či dvojšipkou přesměrovat příkaz print.

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.