Portál AbcLinuxu, 12. května 2025 04:44
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:
awk '{system("echo \""$2"\">"$1) }'
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ří)
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.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.