Francouzský výrobce kabelů Nexans upozornil na napjaté dodávky elektrických kabelů. Výstavba nové výrobní linky pro některé typy kabelů může trvat přibližně tři roky. Datacentra potřebují rozsáhlé nízkonapěťové a středněnapěťové rozvody. Poptávka roste současně s modernizací elektrických sítí. Někteří odběratelé proto uzavírají výrazně delší dodavatelské smlouvy [Reuters].
Představena byla (𝕏) virtuální platforma FLYBENCH FPV, která nováčky provede zapojením a konstrukcí dronů.
Google Chrome 156 byl prohlášen za stabilní. Přehled novinek v poznámkách k vydání. Opraveno bylo 353 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Indická společnost eMudhra po bezpečnostním incidentu, tj. kompromitaci soukromých klíčů osmi mezilehlých certifikátů své certifikační autority, opouští globální byznys s SSL/TLS certifikáty.
Dle Phoronixu zveřejnila společnost Trend Micro prostřednictvím programu Zero Day Initiative (ZDI) několik hlášení bezpečnostních zranitelností přímo na veřejném mailing listu LKML, přestože některé chyby dosud nemají opravu začleněnou do hlavní větve jádra. Mezi hlášenými problémy jsou dvě zranitelnosti s hodnocením CVSS 9.0, týkající se SMB Direct a KSMBD, které mohou umožnit vzdálené spuštění kódu. Další hlášení se týkají … více »
Správce hesel KeePassXC byl vydán ve verzi 2.8.0. Přechází na Qt 6, podporuje vkládání hesel s Waylandem, rychlé odemykání pomocí Polkitu nebo možnost nastavení klávesových zkratek (seznam změn).
Databáze DuckDB (Wikipedie) byla vydána ve verzi 2.0.0 LTS. S kódovým názvem Cinnamon Teal (čírka skořicová). S vyladěným protokolem Quack.
V implementaci Broadcom 802.11 byla zjištěna chyba ve zpracování WPS/EAP, týká se to SDK od roku 2010. Broadcom podle výzkumníka Quentina Kaisera odmítl CVE přidělit. Modemy Huawei a Technicolor jsou používány i v ČR, v LTE routerech, běžných domácích routerech a firemních přístupových bodech, jejich současný počet a zranitelnost konkrétních verzí však zatím neznáme. Více detailů a demo. GitHub / Broadcom 802.11 SDK Detection Toolkit.
Byla vydána nová verze 10.8 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Přehled novinek v poznámkách k vydání. Přibyl balíček DietPi WireGuard.
Oslavte vydání openSUSE Leap 16.1 s námi v Praze! Ve středu 4. listopadu 2026 (den po vydání Leapu 16.1) vás zveme na malou oslavu vydání openSUSE Leap 16.1 do pražské kanceláře SUSE. Připravili jsme pro vás dvě krátké přednášky: … více »
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