raylib (Wikipedie), tj. multiplatformní open-source knihovna pro vývoj grafických aplikací a her, byla vydána ve verzi 6.0.
Nové verze AI modelů. Společnost OpenAI představila GPT‑5.5. Společnost DeepSeek představila DeepSeek V4.
Nová čísla časopisů od nakladatelství Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 164 (pdf) a Hello World 29 (pdf).
Bylo oznámeno, že webový prohlížeč Opera GX zaměřený na hráče počítačových her je už také na Flathubu and Snapcraftu.
Akcionáři americké mediální společnosti Warner Bros. Discovery dnes schválili převzetí firmy konkurentem Paramount Skydance za zhruba 110 miliard dolarů (téměř 2,3 bilionu Kč). Firmy se na spojení dohodly v únoru. O část společnosti Warner Bros. Discovery dříve usilovala rovněž streamovací platforma Netflix, se svou nabídkou však neuspěla. Transakci ještě budou schvalovat regulační orgány, a to nejen ve Spojených státech, ale také
… více »Canonical vydal (email, blog, YouTube) Ubuntu 26.04 LTS Resolute Raccoon. Přehled novinek v poznámkách k vydání. Vydány byly také oficiální deriváty Edubuntu, Kubuntu, Lubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu Studio, Ubuntu Unity a Xubuntu. Jedná se o 11. vydání s dlouhodobou podporou (LTS).
V programovacím jazyce Go naprogramovaná webová aplikace pro spolupráci na zdrojových kódech pomocí gitu Gitea (Wikipedie) byla vydána v nové verzi 1.26.0. Přehled novinek v příspěvku na blogu.
Ve středu 29. dubna 2026 se v pražské kanceláři SUSE v Karlíně uskuteční 7. Mobile Linux Hackday, komunitní setkání zaměřené na Linux na mobilních zařízeních, kernelový vývoj i uživatelský prostor. Akce proběhne od 10:00 do večerních hodin. Hackday je určen všem zájemcům o praktickou práci s Linuxem na telefonech. Zaměří se na vývoj aplikací v userspace, například bankovní aplikace, zpracování obrazu z kamery nebo práci s NFC, i na úpravy
… více »LilyPond (Wikipedie) , tj. multiplatformní svobodný software určený pro sazbu notových zápisů, byl vydán ve verzi 2.26.0. Přehled novinek v aktualizované dokumentaci.
Byla vydána nová verze 11.0.0 otevřeného emulátoru procesorů a virtualizačního nástroje QEMU (Wikipedie). Přispělo 237 vývojářů. Provedeno bylo více než 2 500 commitů. Přehled úprav a nových vlastností v seznamu změn.
AWK je programovací jazyk a zároveň tradiční *nixový nástroj (awk) sloužící ke zpracování textových proudů. Název vznikl složením prvních písmen příjmení třech hlavních autorů AWKu: Alfred V. Aho, Peter J. Weinberger a Brian W. Kernighan.
# jak na "Hello, world!" a komentář v AWKu...
BEGIN { print "Hello, world!" }
AWK je poněkud více těžkotonážní než grep, sed, cut a podobné nástroje. Používáte-li tedy ke zpracování textu kombinaci těchto nástrojů a ještě awk navrch, tak vězte, že v rámci optimalizace by takový příkaz bylo velmi pravděpodobně možné přepsat pouze do AWKu. Následující dva příkazy docílí stejného výsledku:
$ dmesg | grep CPU0 | cut -d' ' -f2
AMD
$ dmesg | awk '/CPU0/ { print $2 }'
AMD
Toto bylo jedno z nejtriviálnějších použití AWKu. Trochu jej rozebereme. Předpis /regexp/ { příkazy } provede příkazy na ty řádky textu, které odpovídají danému regulárnímu výrazu. A co dělá print $2? Vypíše druhý sloupec právě zpracovávaného řádku. Oddělovačem sloupců (či polí) je ve výchozím nastavení mezera a tabulátor, ale pomocí proměnné FS (field separator) toto můžete změnit. Další zvláštní proměnnou je RS (record separator), pomocí které lze nastavit oddělovač jednotlivých řádků (či záznamů). Výchozí hodnotou je '\n', tedy znak nového řádku. Další užitečné proměnné jsou NR (number of records) a NF (number of fields), přičemž první drží pořadové číslo právě zpracovávaného řádku a druhá počet sloupců tohoto řádku.
Další důležitou součástí jazyka jsou speciální bloky BEGIN { ... } a END { ... }. První se vykoná jednou, hned po spuštění, ještě než se začne zpracovávat text a druhý pro změnu až na konci, když je text zpracován. Pro ilustraci uvedu příklad využívající těchto možností:
$ find . -name *.ebuild
./media-video/subtitlecomposer/subtitlecomposer-0.5.3_p20100510.ebuild
./app-misc/lc/lc-1.0.3-r1.ebuild
./app-i18n/man-pages-cs/man-pages-cs-0.18.20090209.ebuild
./app-office/eqonomize/eqonomize-0.6.ebuild
$ find . -name '*.ebuild' -print0 | awk 'BEGIN { RS="\0"; FS="/" } { print NR ": " $4 }'
1: subtitlecomposer-0.5.3_p20100510.ebuild
2: lc-1.0.3-r1.ebuild
3: man-pages-cs-0.18.20090209.ebuild
4: eqonomize-0.6.ebuild
V této ukázce jsem si programem find nechal vypsat názvy souborů s příponou ".ebuild" v aktuálním adresáři. Názvy jednotlivých souborů jsou díky (nestandardnímu) přepínači -print0 oddělené znakem "\0" místo "\n", což se může hodit tehdy, když očekáváme exoticky pojmenované soubory, které mají třeba znak "\n" v názvu. V AWKu v sekci BEGIN nastavíme proměnnou RS tak, aby se počítalo se zvláštním oddělováním řádků. Nastavíme také proměnnou FS na lomítko, takže jednotlivé prvky cest k souborům budou obsaženy ve speciálních proměnných $1, $2, atd. Poté v hlavním bloku budeme vypisovat čísla řádků a za ně dvojtečku a čtvrtý sloupec, což můžou být názvy samotných ebuildů. Jak vidíte, řetězce lze spojovat bez speciálních operátorů, dokonce i mnou uvedené mezery jsou tam jen pro přehlednost.
AWK má dostupné různé matematické funkce, jako třeba cos(), sin(), exp(), log(), sqrt(). Fungují i standardní operátory +, -, * a /. Kromě toho má AWK ještě několik předdefinovaných funkcí pro práci s řetězci, z nichž některé si také předvedeme. A pokud vám v AWKu nějaká funkce chybí, můžete si ji sami definovat. Uživatelsky definované funkce, stejně jako ty vestavěné, mohou vracet hodnoty (pomocí příkazu return).
Mezi základní funkce pro práci s řetězci patří length() pro zjištění délky řetězce, sub() pro nahrazení textu v řetězci, split() pro rozdělení řetězce dle daného oddělovače do daného pole, sprintf() pro formátování výstupu a tolower() a toupper() pro změnu velikosti písmen na všechna malá či velká.
Toto je asi vhodná chvíle pro představení přepínače -f, kterému lze jako argument předat cesta k souboru s programem v AWKu. U delších programů z pochopitelných důvodů přestává být praktické psát je celé do příkazového řádku. Následuje o trochu složitější příklad:
BEGIN { x = 0 }
{
if ( NF == 2 ) {
print toupper($2) ", " toupper(substr($1, 1, 1)) tolower(substr($1, 2))
} else {
x++
}
}
END {
if ( x > 0 ) print sprintf("Nektere zaznamy (%d) byly preskoceny...", x)
}
Tento program zkontroluje, zda řádky obsahují dvě slova a pokud ano, vypíše je ve formátu "SLOVO2, Slovo1". Pokud soubor obsahuje jeden či více řádků, které nemají dvě slova, tak program na konci vypíše hlášení s počtem takovýchto řádků. Máme-li vstupní soubor jmena.txt s následujícím obsahem:
david watzke LUBOŠ Doležel a někdo další
a zároveň máme výše uvedený program uložený v textovém souboru s názvem program.awk, tak docílíme následujícího:
$ awk -f program.awk < jmena.txt WATZKE, David DOLEŽEL, Luboš Nektere zaznamy (1) byly preskoceny...
Na této ukázce jsem odhalil, že awk umí pracovat s podmínkami if, ale zrovna tak nemá problém s cykly a spoustou dalších věcí. Rozsah podporovaných vychytávek se liší mezi různými implementacemi. Původní AWK byl totiž rozšířen a vznikl tak nawk (zkratka new awk, tj. nový awk) a kromě toho je zde také velmi rozšířený gawk, neboli GNU awk.
Jelikož cílem článku evidentně není naučit vás AWK kompletně, ale pouze naznačit, k čemu jej lze použít, tak další studium jeho možností nechám na vás. V diskuzi se můžete podělit s ostatními o své zkušenosti.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
vězte, že v rámci optimalizace by takový příkaz bylo velmi pravděpodobně možné přepsat pouze do AWKu.A kdyby to stále ještě dřelo, tak perl to zachrání :).
přece jen perl byl vytvořen jako náhraa AWKu ...
Perl je sice inspirovanej AWKem (v některých směrech), ale není to jen nástroj pro zpracování textu. Jasně, i s AWKem lze provádět ledacos, ale nedá se to srovnávat.
Ano. Kdysi jsem se snažil používat pro zpracování textu awk, ale pak jsem dal přednost perlu (znalosti perlu se hodí i jinde; syntaxe obou jazyků je zvláštní, ale perl mi prostě vyhovuje víc). Díky za článek.Právě přecházím :).
$ time dmesg | awk '/CPU0/ { print $4 }'
real 0m0.016s
user 0m0.016s
sys 0m0.008s
$ time dmesg | grep CPU0 | cut -d' ' -f7
real 0m0.011s
user 0m0.012s
sys 0m0.004s
ke zminenemu perleni: to zni zajimave... porovnani napriklad python, perl awk a sed/cut/grep/atd. pro zpracovani textu... by mozna opravdu zaujalo vice lidi, co myslis Davide
Já nevím, mně připadá celkem zbytečné se učit X, když máme jiné jazyky, např. Y, které jsou jednodušší, přehlednější a tak celkově prostě lepší.Je mi líto, ale za X a Y jde dosadit naprosto cokoli, kde X i Y na daný úkol stačí. Dokonce ani ta přehlednost v mnoha případech neplatí, dobře napsaná sada pravidel v Perlu může být daleko přehlednější. Divné, že to říkám já, který v Pythonu plynně píšu, ale v Perlu jsem úplný začátečník a hlavní pomůckou při psaní kódu je Google.
) nestalo.
To by se asi nikde jinde (whitespace je asi čestná výjimka :-)) nestalo.
Makefile :-(
Ale teď jsem to zkusil a VIM mně to zvýrazňuje jako chybu, tak chytrý to pythonu asi nebude, alespoň na to míchání tabu a mezer je `python -tt ...', jenže to neřeší všechno.
Na toho chudáka s notepadem a druhého s textareou přece musíme brát ohleJaký je mezi nimi rozdíl?
Někdo dvěma mezerami, někdo čtyřmi, někdo tabulátorem.Python umožňuje odsazovat v podstatě jakýmkoliv počtem bílých znaků, jenom je potřeba, aby bylo v celém souboru jednotné. Jinak to může dělat divné věci.
To jen fundamentalisté vykřikují, že existuje jeden Jediný Správný Způsob a všechno ostatní je špatně.Pokud je určitý způsob odsazování součástí syntaxe jazyka, tak je správný ten a jiný ne. V C++ si taky nemůžu říct, že se mi nelíbí složené závorky a místo nich chci psát třeba špičaté, protože se mi víc líbí.
Problém s Pythonem je to samé, akorát výsledek nejen že odporuje stylistickým konvencím (nevypadá to hezky), ale navíc ani nefunguje správně.
Pro vás je to možná "to samé, akorát…", pro mne je to naprosto zásadní rozdíl.
Pokud je určitý způsob odsazování součástí syntaxe jazyka, tak je správný ten a jiný ne.
Jistě. A já tvrdím, že formátování whitespace by nemělo být syntakticky významné.
kill $(ps -Af | awk '$8 ~ /nspluginwrapper/ { print $2 }')
Na složitější ale také raději perlím.
killall nspluginwrapper?
AWK je verzatilní dost. :)To jsem poznal, jak je verzatilní. Proto po zkušenostech přepisuju generátor webu do perlu.
Nejlepší je asi GNU AWK varianta.Bez některých GNU rozšíření se s tím nedá pořádně pracovat.
'\''
jak pouzit jednoduchou uvozovku uvnitr awkujak vložit jednoduchou uvozovku do textu uvozeného jednoduchými uvozovkami
tak ji staci napsat taktotak to nejde a je potřeba text rozdělit a vložit ji mezi jeho části
'aaaa'\''bbbb' # "aaaa'bbbb"
Ted uz zbyva jen vysvetlit nam neznalym, co to jsou ty jednoduche uvozovky (a dvojite uvozovky). Ja znam "jen" uvozovky a apostrofy.
DejvTen rozdíl je spíš sémantický. Unicode má sice tři různé znaky (U+0027 apostrophe, U+2018 left single quotation mark, U+2019 right single quotation mark), ale běžně se ale používá jen jeden (ten původní z ASCII). U programovacích jazyků včetně Bourne shellu je to o to zamotanější, že sémanticky jde sice o jednoduché uvozovky, ale pro otevírací i uzavírací se používá stejný znak, a to U+0027. A aby byl zmatek dokonalý, v seznamu unicode znaků se pro apostrof doporučuje používat U+2019 (right single quotation mark). :-)
U dvojitých uvozovek je to pak ještě komplikováno tím, že různé jazyky používají různé verze uvozovek (jako šestka/devítka, normálně/převráceně, dole/nahoře) a jejich kombinace - viz znaky U+201A až U+201F.
Zdravim,
v prvom rade velmi pekne dakujem za tento clanok, ako aj za vsetky predchadzajuce. Kazdy mi nieco dal, co je skvele.
Si pamatam, ked som spatril prirucku awk-u po prvykrat, tak som to nechal na dalsi vikend, ked budem mat viac casu. Uz ubehlo tych vikendov doteraz. Kazdopadne, tento clanok ma nakopol a som rad. Takze zacinam radsi uz dneska a cez vikend uz daco hadam vypotim zo seba.
pepe@PC-Pepe:~$ dmesg | grep CPU0 | cut -d' ' -f2
7581.955546]
7581.980078]
9400.047266]
9400.074458]
9566.345718]
9566.373324]
CPU0
CPU0
pepe@PC-Pepe:~$ dmesg | awk '/CPU0/ { print $2 }'
0.000145]
0.077124]
0.508710]
46.174659]
46.199292]
57.310763]
57.348874]
7581.955546]
7581.980078]
9400.047266]
9400.074458]
9566.345718]
9566.373324]
CPU0
CPU0
pepe@PC-Pepe:~$
hi :)
dmesg | grep CPU0 | tr -s ' ' | cut -d' ' -f2A to iste vieme cez jeden awk
Název vznikl složením prvních písmen příjmení třech hlavních autorů AWKu: Alfred V. Aho, Peter J. Weinberger a Brian W. Kernighan.Vida, ja mel dojem, ze je to jen zkratka pro AWKward... :)
awk '{ if ( NF <= 20 ) {print NR } }' test.txt
ale chcel by som aby výstup vyzeral takto:
NR : obsah riadku
Takže ako mu mám povedať že za 'NE " : "' ma vypísať celý riadok? Vopred vďaka za usmernenie
print sprintf("%d: %s", NF, $0)
#nebo
print NR ": " $0