abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:22 | Nová verze

    Po téměř třech letech od vydání verze 9 byla vydána nová verze 10 linuxové distribuce Mageia (Wikipedie). Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 04:00 | Zajímavý software

    Nourish (GitHub) je nový správce oken pro Linux. Tradiční plochy nahrazuje nekonečným plátnem a posouváním a přibližováním. Využívá vlastní kompozitor pro Wayland s názvem y5. Videoukázka.

    Ladislav Hagara | Komentářů: 3
    27.6. 15:33 | Komunita

    Po 20 letech a 17 otevřených (open source) krátkých filmech Blender Studio oznámilo plán na svůj první celovečerní film. Cílem samozřejmě není jenom nový otevřený film, ale především vývoj a vylepšení otevřených nástrojů pro spolupráci napříč celým procesem a vytvoření otevřené příručky (playbook) pro filmovou produkci ve velkém měřítku s informacemi, které jsou obvykle dostupné pouze uvnitř komerčních studií, a pomoci tak nezávislým tvůrcům překonat technické a organizační bariéry.

    Ladislav Hagara | Komentářů: 0
    27.6. 05:00 | Nová verze

    Byla vydána nová verze 26.6.25 svobodného multiplatformního video editoru Shotcut (Wikipedie) postaveného nad multimediálním frameworkem MLT. Shotcut je vedle zdrojových kódů k dispozici také ve formátech AppImage, Flatpak a Snap.

    Ladislav Hagara | Komentářů: 0
    26.6. 14:44 | IT novinky

    Apple bez varování odstranil ze svého obchodu sociální síť VKontaktě i další aplikace skupiny VK, jako je VK Music nebo VK Video [Novinky.cz].

    Ladislav Hagara | Komentářů: 18
    26.6. 14:22 | IT novinky

    V dubnu loňského roku představený poštovní klient Notion Mail bude 22. září ukončen.

    Ladislav Hagara | Komentářů: 3
    26.6. 04:33 | Komunita

    Konference OpenAlt 2026 hledá přednášející. Proběhne o víkendu 7. a 8. listopadu na půdě Fakulty informačních technologií VUT v Brně. Témata konference jsou: Otevřený a svobodný software, IoT a Hnutí tvůrců, Vzdělávání, Bezpečnost a soukromí, Otevřená společnost, komunity a data, OpenMobility a další.

    Ladislav Hagara | Komentářů: 0
    26.6. 04:22 | IT novinky

    Společnosti OpenAI a Broadcom oznámily čip optimalizovaný pro AI pojmenovaný Jalapeño.

    Ladislav Hagara | Komentářů: 0
    25.6. 20:22 | Nová verze

    Deno (Wikipedie), běhové prostředí (runtime) pro JavaScript, TypeScript a WebAssembly, bylo vydáno v nové verzi 2.9. Hlavní novinkou je deno desktop pro převod Deno projektu na desktopovou aplikaci. Jedná se o alternativu k frameworkům Electron nebo Tauri.

    Ladislav Hagara | Komentářů: 2
    25.6. 15:44 | IT novinky

    Od zítra jsou Datové schránky oficiálně na nové adrese datovka.gov.cz. Adresa mojedatovaschranka.cz zůstává funkční do 27. srpna 2026, následně budou uživatelé automaticky přesměrováni na datovka.gov.cz.

    Ladislav Hagara | Komentářů: 3
    Které desktopové prostředí na Linuxu používáte?
     (11%)
     (7%)
     (2%)
     (17%)
     (31%)
     (4%)
     (6%)
     (2%)
     (15%)
     (26%)
    Celkem 2004 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník


    Dotaz: Podivné chování getline v awk skriptu

    21.10.2021 17:52 Tomáš Pelc | skóre: 22 | blog: multimedialni_pc_k_LCD_TV
    Podivné chování getline v awk skriptu
    Přečteno: 447×
    Parsuji výstup ldapsearch z AD a narazil jsem na zvláštní chování getline v awk skriptu. Nedokážu přijít na to, proč druhý výskyt jména "Lukaš" (ano, je tam krátké "a") se nevytiskne:
    echo -e "givenName:: THVrYcWh\ngivenName:: VG9tw6HFoQo=\ngivenName:: THVrYcWh\ngivenName: Karel" | awk '{ v = "" } { if ($1 ~ "::") { "echo "$2" | base64 -d" | getline v; gsub (/::/, ":", $1); print $1, v } else { print $0 }}'
    givenName: Lukaš
    givenName: Tomáš
    givenName: 
    givenName: Karel
    Máte někdo nějaké vysvětlení?

    Jak upravit skript, aby fungoval i v takovém případě podle očekávání?

    Díky

    Řešení dotazu:


    Odpovědi

    21.10.2021 18:46 Peter Golis | skóre: 65 | blog: Bežné záležitosti | Bratislava
    Rozbalit Rozbalit vše Re: Podivné chování getline v awk skriptu
    Nebolo by lepšie ten ldapsearch urobiť v nejakom high level jazyku, napr pytóne ktorý má priamo knižnicu na LDAP čo rovno aj dekóduje ten base64 na text s diakritikou?
    22.10.2021 07:24 Tomáš Pelc | skóre: 22 | blog: multimedialni_pc_k_LCD_TV
    Rozbalit Rozbalit vše Re: Podivné chování getline v awk skriptu
    Chápu, co navrhuješ, ale celkové zadání je takové: bude to součástí jenkins jobu a chceme to zachovat "as much simple as possible", takže využívat pouze již instalované core nástroje. Druhá věc je, že awk je mi prostě v této situaci sympatičtější a tak bych tomu chtěl mimo jiné přijít "na kloub".
    22.10.2021 08:35 Peter Golis | skóre: 65 | blog: Bežné záležitosti | Bratislava
    Rozbalit Rozbalit vše Re: Podivné chování getline v awk skriptu
    Tiež mám podobný názor na pytón. Ale ak sa ten ldapsearch s Jerkinsom nedá použiť, tak veľa zdaru. Z toho pytónu lezie lepší výstup ktorý nie je treba takto ošetrovať. Ldapsearch trošku zaspal dobu.
    Řešení 1× (Вherzet)
    21.10.2021 21:18 z_sk | skóre: 34 | blog: analyzy
    Rozbalit Rozbalit vše Re: Podivné chování getline v awk skriptu
    echo -e "givenName:: THVrYcWh\ngivenName:: VG9tw6HFoQo=\ngivenName:: THVrYcWh\ngivenName: Karel"|while read line; do items=(`echo $line`); define=${items[0]}; if [ "${define:10:1}" = ":" ]; then echo "${define:0:10} `echo ${items[1]}|base64 -d`"; else echo $line; fi; done
    debian.plus@protonmail.com
    22.10.2021 07:43 Tomáš Pelc | skóre: 22 | blog: multimedialni_pc_k_LCD_TV
    Rozbalit Rozbalit vše Re: Podivné chování getline v awk skriptu
    Díky za řešení.

    Neuvedl jsem původně, že klíč (givenName:) není jediný, u kterého řeším base64 dekódování, takže skript by potřeboval úpravu. Nicméně ještě jednou díky za pomoc.
    Řešení 1× (Вherzet)
    22.10.2021 09:48 z_sk | skóre: 34 | blog: analyzy
    Rozbalit Rozbalit vše Re: Podivné chování getline v awk skriptu
    Verzia na študovanie:
    keys="givenExtra givenName";
    echo -e "givenExtra:: THVrYcWh\ngivenName:: VG9tw6HFoQo=\ngivenName:: THVrYcWh\ngivenName: Karel"|
    while read line; do
    	items=(`echo $line`);
    	define=${items[0]};
    	
    	for key in $keys;
    	do
    		if [ "$define" = "$key::" ]; then
    			echo "$key: `echo ${items[1]}|base64 -d`";
    			break;
    		fi
    		if [ "$define" = "$key:" ]; then
    			echo $line;
    			break;
    		fi;
    	done;
    done
    
    Jednoriadková verzia: keys="givenExtra givenName"; echo -e "givenExtra:: THVrYcWh\ngivenName:: VG9tw6HFoQo=\ngivenName:: THVrYcWh\ngivenName: Karel"| while read line; do items=(`echo $line`); define=${items[0]}; for key in $keys; do if [ "$define" = "$key::" ]; then echo "$key: `echo ${items[1]}|base64 -d`"; break; fi if [ "$define" = "$key:" ]; then echo $line; break; fi; done; done
    debian.plus@protonmail.com
    Řešení 1× (MakeIranBombedAgain❗)
    22.10.2021 00:00 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: Podivné chování getline v awk skriptu

    S awk:

    echo -e 'givenName:: THVrYcWh\ngivenName:: VG9tw6HFoQo=\ngivenName:: THVrYcWh\ngivenName: Karel' \
    | awk 'BEGIN {  FS = "(\\s|:)+"
                   OFS = ": "
                   b64 = "base64 -d" }
           /^givenName::/ { print $2 |& b64
                            close(b64, "to")
                            b64 |& getline $2
                            close(b64) }
           1'
    

    Bez awk:

    echo -e 'givenName:: THVrYcWh\ngivenName:: VG9tw6HFoQo=\ngivenName:: THVrYcWh\ngivenName: Karel' \
    | while read gn name; do
        [[ "$gn" = *'::' ]] &&
        echo "${gn::-1}" "$(base64 -d <<< "$name")" ||
        echo "$gn" "$name"
      done
    
    22.10.2021 07:37 Tomáš Pelc | skóre: 22 | blog: multimedialni_pc_k_LCD_TV
    Rozbalit Rozbalit vše Re: Podivné chování getline v awk skriptu
    @Andrej - díky za obě řešení.

    Z mého úvodního dotazu nevyplynulo, že "givenName:" resp. "givenName::" není jediný klíč, u kterého řeším base64. Ty klíče tam jsou nejméně tři (ještě např. "dn:" a "sn:"). To už zkusím tvůj skript při-ohnout sám :-)

    Dokázal bys mi objasnit, proč to moje původní řešení funguje tak nederministicky? Proč se proměnná "v" v případě druhého výskytu jména nenaplní správně, ale zůstane prázdná?
    22.10.2021 09:14 X
    Rozbalit Rozbalit vše Re: Podivné chování getline v awk skriptu
    Mimochodem, kdyz nakopiruji tvoje reseni do terminalu dotanu:
    /bin/sh: 1: Syntax error: "|" unexpected
    Takze zrovna prenositelne to moc neni..
    Řešení 1× (Вherzet)
    22.10.2021 09:27 z_sk | skóre: 34 | blog: analyzy
    Rozbalit Rozbalit vše Re: Podivné chování getline v awk skriptu
    BASH != SH
    debian.plus@protonmail.com
    22.10.2021 14:01 Peter Golis | skóre: 65 | blog: Bežné záležitosti | Bratislava
    Rozbalit Rozbalit vše Re: Podivné chování getline v awk skriptu
    To je v poho. Človek za chvíľu zistí že nie všetky záznamy z ldapsearch sú v UTF, a posunie sa na druhú úroveň zbytočného riešenia.

    Good luck :-)
    22.10.2021 17:18 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: Podivné chování getline v awk skriptu

    Asi to špatně kopíruješ nebo máš špatný shell nebo obojí. Problém s řádkem začínajícím | jistě není tak těžké vyřešit.

    22.10.2021 17:20 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: Podivné chování getline v awk skriptu

    Druhé řešení (Bash) na givenName nezáleží.

    První rešení (AWK) se dá snadno přiohnout, aby se klíč zachoval.

    Řešení 1× (Tomáš Pelc (tazatel))
    25.10.2021 15:17 Tomáš Pelc | skóre: 22 | blog: multimedialni_pc_k_LCD_TV
    Rozbalit Rozbalit vše Re: Podivné chování getline v awk skriptu
    Tak jsem se snažil přiohnout tvoje AWK řešení a tady je výsledek:
    ADST="givenName:: THVrYcWh\ngivenName:: VG9tw6HFoQo=\ngivenName:: THVrYcWh\nsn:: VG9tw6HFoQo=\ngivenName: Karel\nsAMAccountName:: xIxlc8WlbcOtxZkK"
    
    echo -e "$ADST" \
      | awk 'BEGIN { FS = ": "; OFS = ": "; b64 = "base64 -d" }
      { if ($1 ~ ":") { print $2 |& b64; close(b64, "to"); b64 |& getline $2; close(b64) }}
      { gsub (/:/, "", $1); print $1, $2 }'
    Předpokládám, že by to šlo vyřešit ještě elegantněji, ale na to už nestačí moje současné znalosti AWKu.

    Založit nové vláknoNahoru

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

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.