Google Chrome 136 byl prohlášen za stabilní. Nejnovější stabilní verze 136.0.7103.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 8 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.
Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových
… více »Richard Stallman přednáší ve středu 7. května od 16:30 na Technické univerzitě v Liberci o vlivu technologií na svobodu. Přednáška je určená jak odborné tak laické veřejnosti.
Jean-Baptiste Mardelle se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.04.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.
TmuxAI (GitHub) je AI asistent pro práci v terminálu. Vyžaduje účet na OpenRouter.
Byla vydána nová verze R14.1.4 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5, Wikipedie). Přehled novinek i s náhledy v poznámkách k vydání. Podrobný přehled v Changelogu.
Bylo vydáno OpenBSD 7.7. Opět bez písničky.
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 ...
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.004ske 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.
To by se asi nikde jinde (whitespace je asi čestná výjimka :-)) nestalo.
Makefile :-(
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.txtale 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