Společnost Meta na dvoudenní konferenci Meta Connect 2025 představuje své novinky. První den byly představeny nové AI brýle: Ray-Ban Meta (Gen 2), sportovní Oakley Meta Vanguard a především Meta Ray-Ban Display s integrovaným displejem a EMG náramkem pro ovládání.
Po půl roce vývoje od vydání verze 48 bylo vydáno GNOME 49 s kódovým názvem Brescia (Mastodon). S přehrávačem videí Showtime místo Totemu a prohlížečem dokumentů Papers místo Evince. Podrobný přehled novinek i s náhledy v poznámkách k vydání a v novinkách pro vývojáře.
Open source softwarový stack ROCm (Wikipedie) pro vývoj AI a HPC na GPU od AMD byl vydán ve verzi 7.0.0. Přidána byla podpora AMD Instinct MI355X a MI350X.
Byla vydána nová verze 258 správce systému a služeb systemd (GitHub).
Byla vydána Java 25 / JDK 25. Nových vlastností (JEP - JDK Enhancement Proposal) je 18. Jedná se o LTS verzi.
Věra Pohlová před 26 lety: „Tyhle aféry každého jenom otravují. Já bych všechny ty internety a počítače zakázala“. Jde o odpověď na anketní otázku deníku Metro vydaného 17. září 1999 na téma zneužití údajů o sporožirových účtech klientů České spořitelny.
Byla publikována Výroční zpráva Blender Foundation za rok 2024 (pdf).
Byl vydán Mozilla Firefox 143.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Nově se Firefox při ukončování anonymního režimu zeptá, zda chcete smazat stažené soubory. Dialog pro povolení přístupu ke kameře zobrazuje náhled. Obzvláště užitečné při přepínání mezi více kamerami. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 143 bude brzy k dispozici také na Flathubu a Snapcraftu.
Byla vydána betaverze Fedora Linuxu 43 (ChangeSet), tj. poslední zastávka před vydáním finální verze, která je naplánována na úterý 21. října.
Multiplatformní emulátor terminálu Ghostty byl vydán ve verzi 1.2 (𝕏, Mastodon). Přehled novinek, vylepšení a nových efektů v poznámkách k vydání.
1612800;37,17;22,67;0;0;52,38;23,25;0;0;73,74;22,78;0;0;37,02;20,4;98,49;0;2007-01-05 06:14:09 1641600;37,3;22,74;0;0;50,63;23,43;0;0;73,23;22,84;0;0;37,63;20,77;98,76;0;2007-01-05 14:14:09 1670400;37,58;22,71;0;0;49,57;23,48;0;0;72,1;22,79;0;0;38,33;20,48;99,16;0;2007-01-05 22:14:09 1699200;37,16;22,61;0;0;49,09;23,12;0;0;73,83;22,71;0;0;38,02;19,95;99,31;0;2007-01-06 06:14:09 1728000;36,9;22,58;0;0;49,07;22,97;0;0;73,88;22,66;0;0;38,16;19,73;99,39;0;2007-01-06 14:14:09 1756800;36,87;22,56;0;0;49,19;22,88;0;0;73,94;22,63;0;0;38,65;19,6;99,36;0;2007-01-06 22:14:09 1785600;36,87;22,54;0;0;49,28;22,81;0;0;73,97;22,61;0;0;38,93;19,5;99,06;0;2007-01-07 06:14:09 1814400;37,08;22,53;0;0;49,39;22,78;0;0;74,02;22,6;0;0;39,95;19,45;98,86;0;2007-01-07 14:14:09 1843200;37,27;22,53;0;0;49,42;22,78;0;0;74,03;22,59;0;0;40,03;19,43;99,17;0;2007-01-07 22:14:09 28800;37,35;22,63;0;0;49,83;22,94;0;0;73,66;22,67;0;0;38,99;20,11;98,9;0;2007-01-08 15:00:49Potřebuji získat něco takového:
1612800;37,17;22,67;0;0;52,38;23,25;0;0;73,74;22,78;0;0;37,02;20,4;98,49;0;20070105061409 1641600;37,3;22,74;0;0;50,63;23,43;0;0;73,23;22,84;0;0;37,63;20,77;98,76;0;20070105141409 1670400;37,58;22,71;0;0;49,57;23,48;0;0;72,1;22,79;0;0;38,33;20,48;99,16;0;20070105221409 1699200;37,16;22,61;0;0;49,09;23,12;0;0;73,83;22,71;0;0;38,02;19,95;99,31;0;20070106061409 1728000;36,9;22,58;0;0;49,07;22,97;0;0;73,88;22,66;0;0;38,16;19,73;99,39;0;20070106141409 1756800;36,87;22,56;0;0;49,19;22,88;0;0;73,94;22,63;0;0;38,65;19,6;99,36;0;20070106221409 1785600;36,87;22,54;0;0;49,28;22,81;0;0;73,97;22,61;0;0;38,93;19,5;99,06;0;20070107061409 1814400;37,08;22,53;0;0;49,39;22,78;0;0;74,02;22,6;0;0;39,95;19,45;98,86;0;20070107141409 1843200;37,27;22,53;0;0;49,42;22,78;0;0;74,03;22,59;0;0;40,03;19,43;99,17;0;20070107221409 28800;37,35;22,63;0;0;49,83;22,94;0;0;73,66;22,67;0;0;38,99;20,11;98,9;0;20070108150049Zatím používám toto, ale je to pomalé:
#!/bin/bash awk 'BEGIN { FS=";"; } { split($18, Z1, " "); split(Z1[1], D, "-"); split(Z1[2], T, ":"); printf("%s;", $0); printf("%s%s%s", D[1], D[2], D[3]); printf("%s%s%s\n", T[1], T[2], T[3]); }'
Pokud máte jistotu, že se v tom souboru ty znaky jinde vyskytnout nemohou (z ukázky to tak vypadá), nejjednodušší asi bude prohnat to přes
tr -d ' :-'
(Předpokládám, že chcete odstranit pomlčky (jak to máte v ukázce) a ne tečky (jak píšete v nadpisu).)
151200;-35,426429;23,785839;0,000000;0,000000;30,512638;23,847171;0,000000;0,000000;68,932240;23,730166;0,000000;0,000000;33,195928;-21,802709;98,254647;0,000000;2013-02-23 22:48:40 162000;35,408064;23,657363;0,000000;0,000000;-30,515696;23,728122;0,000000;0,000000;68,969240;23,623039;0,000000;0,000000;33,234408;-21,691139;-98,222001;0,000000;2013-02-24 01:48:40 172800;35,374079;23,559708;0,000000;0,000000;30,523148;23,623681;0,000000;0,000000;68,974715;23,525660;0,000000;0,000000;33,267497;21,602085;98,032074;0,000000;2013-02-24 04:48:40 183600;35,361032;23,466020;0,000000;0,000000;30,557975;23,524950;0,000000;0,000000;69,004485;23,435732;0,000000;0,000000;-33,318995;21,522748;98,042093;0,000000;2013-02-24 07:48:40Než jsem si to uvědomil, byl už soubor vložený.
Tak můžete zkusit třeba
sed -re 's/([0-9]+)-([0-9]+)-([0-9]+) ([0-9]+):([0-9]+):([0-9]+)$/\1\2\3\4\5\6/'
Ale asi to nebude nijak závratně rychlejší než ten awk.
[root@master ~]# time sed -re 's/([0-9]+)-([0-9]+)-([0-9]+) ([0-9]+):([0-9]+):([0-9]+)$/\1\2\3\4\5\6/' tmp2 > /dev/null
real 0m0.499s
user 0m0.490s
sys 0m0.000s
[root@master ~]# time awk 'BEGIN {
FS=";";
}
{
split($18, Z1, " ");
split(Z1[1], D, "-");
split(Z1[2], T, ":");
printf("%s;", $0);
printf("%s%s%s", D[1], D[2], D[3]);
printf("%s%s%s\n", T[1], T[2], T[3]);
}' tmp2 2&>1 > /dev/null
real 0m0.258s
user 0m0.254s
sys 0m0.004s
[root@master ~]# time awk -F';' '{{ OFS=";";gsub(/[- :]/, "", $NF) ;print}}' tmp2 > /dev/null
real 0m0.189s
user 0m0.188s
sys 0m0.001s
perl -nE 'my @row = split /;/; $row[-1] =~ y/ :-//d; print join q{;}, @row'
#!/bin/bash awk 'BEGIN { FS=";"; } { OFS=";"; gsub("[-: ]","",$18); print; }'3. Perl: 9,6 s.
vybrat řádky od-do podle datumu a časuToto ten text umožňuje taky pomocí standardního porovnání řetězců, ne? Efektivní práci s časem (přičítání dnů, atd.), neumožňuje ani jedno.
Co třeba tohle? Není tam ale žádné ošetření chyb a celkem naivně to spoléhá, že sloupec s datem je ten poslední a že za sebou už nemá středník:
#include <iostream> #include <sstream> #include <string> int main() { std::stringstream stream; std::string line, last_field; while (std::getline(std::cin, line)) { stream.clear(); stream.str(line); while (std::getline(stream, last_field, ';')); std::cout << line.substr(0, line.size() - last_field.size()); for (char c : last_field) switch (c) { case ' ': case '-': case ':': break; default: std::cout << c; } std::cout << std::endl; } return 0; }
Když tu věc spustím, třeba takhle, …
clang++ -Wall -Wextra --std=c++11 -march=native -O3 ./bla.c++ -o bla ./bla <<-BLA 1612800;37,17;22,67;0;0;52,38;23,25;0;0;73,74;22,78;0;0;37,02;20,4;98,49;0;2007-01-05 06:14:09 1641600;37,3;22,74;0;0;50,63;23,43;0;0;73,23;22,84;0;0;37,63;20,77;98,76;0;2007-01-05 14:14:09 1670400;37,58;22,71;0;0;49,57;23,48;0;0;72,1;22,79;0;0;38,33;20,48;99,16;0;2007-01-05 22:14:09 1699200;37,16;22,61;0;0;49,09;23,12;0;0;73,83;22,71;0;0;38,02;19,95;99,31;0;2007-01-06 06:14:09 1728000;36,9;22,58;0;0;49,07;22,97;0;0;73,88;22,66;0;0;38,16;19,73;99,39;0;2007-01-06 14:14:09 1756800;36,87;22,56;0;0;49,19;22,88;0;0;73,94;22,63;0;0;38,65;19,6;99,36;0;2007-01-06 22:14:09 1785600;36,87;22,54;0;0;49,28;22,81;0;0;73,97;22,61;0;0;38,93;19,5;99,06;0;2007-01-07 06:14:09 1814400;37,08;22,53;0;0;49,39;22,78;0;0;74,02;22,6;0;0;39,95;19,45;98,86;0;2007-01-07 14:14:09 1843200;37,27;22,53;0;0;49,42;22,78;0;0;74,03;22,59;0;0;40,03;19,43;99,17;0;2007-01-07 22:14:09 28800;37,35;22,63;0;0;49,83;22,94;0;0;73,66;22,67;0;0;38,99;20,11;98,9;0;2007-01-08 15:00:49 BLA
… dává mi to výstup:
1612800;37,17;22,67;0;0;52,38;23,25;0;0;73,74;22,78;0;0;37,02;20,4;98,49;0;20070105061409 1641600;37,3;22,74;0;0;50,63;23,43;0;0;73,23;22,84;0;0;37,63;20,77;98,76;0;20070105141409 1670400;37,58;22,71;0;0;49,57;23,48;0;0;72,1;22,79;0;0;38,33;20,48;99,16;0;20070105221409 1699200;37,16;22,61;0;0;49,09;23,12;0;0;73,83;22,71;0;0;38,02;19,95;99,31;0;20070106061409 1728000;36,9;22,58;0;0;49,07;22,97;0;0;73,88;22,66;0;0;38,16;19,73;99,39;0;20070106141409 1756800;36,87;22,56;0;0;49,19;22,88;0;0;73,94;22,63;0;0;38,65;19,6;99,36;0;20070106221409 1785600;36,87;22,54;0;0;49,28;22,81;0;0;73,97;22,61;0;0;38,93;19,5;99,06;0;20070107061409 1814400;37,08;22,53;0;0;49,39;22,78;0;0;74,02;22,6;0;0;39,95;19,45;98,86;0;20070107141409 1843200;37,27;22,53;0;0;49,42;22,78;0;0;74,03;22,59;0;0;40,03;19,43;99,17;0;20070107221409 28800;37,35;22,63;0;0;49,83;22,94;0;0;73,66;22,67;0;0;38,99;20,11;98,9;0;20070108150049
A to vypadá, že by to mohlo být ono.
Ale opravdu je v awk
nějaký problém s výkonem? Nevěřím, že by awk
nemělo tohle rychleji. Ještě bys mohl použít tu druhou implementaci getline()
, která dostane předem naalokovaný buffer pevné délky, a v tom bufferu pak vyzobávat znaky. Určitě tady kdekdo vymyslí z fleku klidně dalších pět optimatlizací. Jen je otázka, jestli to fakt stojí za to.
A ještě se to dá vzít třeba klidně zezadu. Koneckonců, proč ne.
#include <iostream> #include <string> int main() { std::string line, last_field; while (std::getline(std::cin, line)) { last_field.clear(); size_t removed{0}; for (auto it = line.rbegin(); it != line.rend() && *it != ';'; ++it) { switch (*it) { case ' ': case '-': case ':': ++removed; break; default: last_field += *it; } } std::cout << line.substr(0, line.size() - last_field.size() - removed); std::cout << std::string{last_field.rbegin(), last_field.rend()}; std::cout << std::endl; } return 0; }
perl -i.bak -pE 'my @row = split /;/; $row[-1] =~ y/ :-//d; $_= join q{;}, @row;' input.txt
2700000;-32,513844;-24,360552;0,000000;0,000000;-27,325044;-24,370144;0,000000;0,000000;79,236248;24,215390;0,000000;0,000000;28,465076;22,663942;98,953721;0,000000;2013-03-25 10:48:40;20130325104840
cat /tmp/t | tr '\n' '\t' | tr ';' '\n' | LC_CTYPE=C sed '/:/{s/[ :-]//g}' | tr '\n' ';' | tr '\t' '\n'
time LC_CTYPE=C awk -v FS=';' -v OFS=';' '{gsub("[ -:]", "", $(NF-1) )}1' /tmp/t >/dev/null
Tiskni
Sdílej: