Ask Your Question
0

Awk x MAwk

asked 2014-12-16 12:41:28 +0100

stekl.h gravatar image

updated 2014-12-16 13:52:36 +0100

Miro Hrončok gravatar image

Zdravím, po problému se sedem teď pro změnu zlobí awk. Příkaz

echo "$X4A5A" | awk 'BEGIN{FS=""}{for(i=NF;i>0;i--) printf("%s",$i)}END{printf("\n")}'

mi na linuxu/mawk vrátí:

atrapS si siht

kdežto na solarisu/awk:

this is Sparta

Jde o třetí úlohu z demotestu (převrátit pořadí písmen v řetězci) - sice mi funguje řešení pomocí funkce substr(), ale toto se mi zdá přehlednější, tak by mě zajímalo v čem je chyba. Případně mohli byste prosím nastínit elegantnější řešení než pomocí substr? Nejde mi o řešení, spíš nápovědu jakou cestou to jde co nejvíc jednoduše a zároveň co nejméně závisle (bez rev, tac, perl, python, C)

edit retag flag offensive close delete

1 Answer

Sort by » oldest newest most voted
3

answered 2014-12-16 19:43:21 +0100

VojtechMyslivec gravatar image

Prázdný oddělovač je extrémní příklad, se kterým se gawk vyrovná tak, že rozseká řádku po znacích. Chování původního awk/nawk podle "překladu" z manuálu: pole jsou rozdělena podle výskytů RE v proměnné FS. awk reprezentuje prázdné FS jako konec řádku (resp. ho tam nenajde). Celý řádek (record) bude tedy i obsahem proměnné $1.

Aby to bylo univerzální (v awk), je třeba použít funkci substr().

Jinak bez awk to lze řešit (z materiálů PS1) minimálně cutem. Na gnu též head a tail umí pracovat po znacích/bytech. Délku řetězce by jsi měl být schopný zjistit.

BTW: bash také umí substring (proměnné). Použití je následující ${parameter:offset:length} (detaily man bash, kapitola Parameter expansion). To se ale v PS1 neučí a je to pouze pro zvídavé :-)

edit flag offensive delete publish link more

Comments

super odpověď..díky :)

stekl.h ( 2014-12-16 19:59:38 +0100 )edit
1

K tej poslednej poznamke by som len dodal, ze taketo specialitky sa daju najst v materialoch predmetu BI-SKJ

Lukas Nagy ( 2014-12-17 07:48:46 +0100 )edit

Your answer

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!

Add answer

[hide preview]

Question tools

Follow
1 follower

Stats

Asked: 2014-12-16 12:41:28 +0100

Seen: 155 times

Last updated: Dec 16 '14