Chcete udržet krok s módou? Tak od ledna terminály, výchozí pozadí i celé desktopy v barvě hnědé jako čokoládová nebo kávová pěna. Barvou roku 2025 je PANTONE 17-1230 Mocha Mousse aneb #A47864.
Byla vydána nová verze 24.2 linuxové distribuce Manjaro (Wikipedie). Její kódové jméno je Yonada. Ke stažení je v edicích GNOME, KDE PLASMA a XFCE.
Open source platforma Home Assistant (Demo, GitHub, Wikipedie) pro monitorování a řízení inteligentní domácnosti byla vydána ve verzi 2024.12.
Byla vydána verze 31.0 svobodného softwaru OBS Studio (Open Broadcaster Software, Wikipedie) určeného pro streamování a nahrávání obrazovky počítače. Přehled novinek na GitHubu. Instalovat lze také z Flathubu.
Emulátory Box86 a Box64 umožňující spouštět linuxové aplikace pro x86 a x86_64 na jiných než x86 a x86_64 architekturách, například ARM a ARM64, byly vydány v nových verzích: Box86 0.3.8 a Box64 0.3.2. Ukázka možností na YouTube.
Byla vydána nová verze 6.1 neměnné (immutable) distribuce openSUSE Leap Micro určené pro běh kontejneru a virtuálních strojů. S vydáním verze 6.1 byla ukončena podpora verze 5.5.
Poslanci dnes ve třetím čtení schválili návrh zákona o digitálních financích. Cílem zákona je implementace předpisů Evropské unie v oblasti digitálních financí, konkrétně nařízení DORA (Digital Operational Resilience Act) o digitální provozní odolnosti finančního sektoru a nařízení MiCA (Markets in Crypto Assets) o trzích kryptoaktiv. Zákon nyní míří k projednání do Senátu ČR. U kryptoměn bude příjem do 100 tisíc Kč za zdaňovací období osvobozen od daně, podobně jako u cenných papírů, a to za podmínky jejich držení po dobu alespoň 3 let.
O víkendu (15:00 až 23:00) proběhne EmacsConf 2024, tj. online konference vývojářů a uživatelů editoru GNU Emacs. Sledovat ji bude možné na stránkách konference. Záznamy budou k dispozici přímo z programu.
Mozilla má nové logo a vizuální identitu. Profesionální. Vytvořeno u Jones Knowles Ritchie (JKR). Na dalších 25 let.
Bylo rozhodnuto, že nejnovější Linux 6.12 je jádrem s prodlouženou upstream podporou (LTS). Ta je aktuálně plánována do prosince 2026. LTS jader je aktuálně šest: 5.4, 5.10, 5.15, 6.1, 6.6 a 6.12.
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: