Byla vydána verze 1.98.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.
Byla vydána nová verze 7.1 (YouTube) svobodného open source redakčního systému WordPress. Kódové jméno Mary Lou bylo vybráno na počest americké jazzové klavíristky Mary Lou Williams (YouTube).
Bun (Wikipedie), tj. běhové prostředí (runtime) a toolkit pro JavaScript a TypeScript, alternativa k Node.js a Deno, byl vydán ve verzi 1.4. Představení novinek také na YouTube. Bun byl přepsán z programovacího jazyka Zig do Rustu. Pomocí Claude Fable 5.
Vývojáři KDE na Mastodonu oznámili vydání balíku aplikací KDE Gear 26.08. Přehled novinek i s náhledy a videi v oficiálním oznámení.
Společnost PINE64 kvůli nedostatku a vysokým cenám DRAM a eMMC dočasně pozastavuje výrobu linuxových zařízení. Výroba zařízení jako PineTime, PineVoice a Pinecil pokračuje.
Společnost Stripe se dohodla na akvizici společnosti OpenRouter. Za 7,5 miliardy dolarů.
Byla vydána nová verze 1.27 programovacího jazyka Go (Wikipedie). Přehled novinek v poznámkách k vydání.
V pátek 28. srpna se v Praze uskuteční již osmý Mobile Linux Hackday. Jako obvykle se potkáme v pražské pobočce SUSE v Karlíně na Křižíkově, takže kromě mobilního Linuxu je to tentokrát i příležitost přijít se podívat na nově zrekonstruované kanceláře. Začínáme v 10:00, ale dorazit můžete samozřejmě kdykoliv v průběhu dne. Setkáním vás provede Petr Hodina, vývojář GPU ovladačů v Mesa 3D a jeden z hlavních lidí české komunity kolem mobilního … více »
Představen byl Raspberry Pi Compute Module 5 Programming Jig. Jedná se o zařízení umožňující připravit Compute Module 5 do plně funkčního stavu bez nutnosti použití dalších vstupně / výstupních desek. Podporuje automatizaci pomocí nástroje rpi-sb-provisioner. Podrobnosti v dokumentaci.
Hackeři ve Francii ukradli data více než půl milionu daňových poplatníků. Je to jeden z největších hackerských útoků v dějinách země. O útoku z konce června informovala až teď daňová správa. Teprve od pondělí dotčeným občanům zasílá e-maily s instrukcemi, jak postupovat dál. Hackeři se sice nedostanou k penězům dotyčných, hrozí ale věrohodné podvody. Hackeři získali třeba celá jména, údaje o rodinných příslušnících nebo také údaje o
… více »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
(mawk: necelé 4 sekundy, počet řádků:194 000)
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: