Společnost Notion Labs stojící za softwarovou platformou pro spolupráci Notion (Wikipedia) oficiálně představila (YouTube) poštovního klienta Notion Mail. Aktuálně funguje pouze nad Gmailem.
Byla vydána nová verze 9.12 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Přehled novinek v poznámkách k vydání.
Na čem aktuálně pracují vývojáři GNOME a KDE Plasma? Pravidelný přehled novinek v Týden v GNOME a Týden v KDE Plasma.
Ubuntu 25.10 bude (𝕏) Questing Quokka (pátrající klokan quokka).
Ubisoft uvolnil zdrojové kódy softwaru Chroma pro simulaci barvosleposti pro vývojáře počítačových her. K dispozici jsou na GitHubu pod licencí Apache 2.0.
Defold (Wikipedie) je multiplatformní herní engine. Nejnovější verze je 1.10.0. Zdrojové kódy jsou k dispozici na GitHubu. Licence vychází z licence Apache 2.0.
Správa služeb hlavního města Prahy se potýká s následky kyberútoku. Hackerská skupina začala zveřejňovat na internetu některé z ukradených materiálů a vyzvala organizaci k vyjednávání. Ta zatím podrobnosti k případu sdělovat nechce. Případem se zabývá policie i Národní úřad pro kybernetickou a informační bezpečnost (NÚKIB).
OCCT je oficiálně k dispozici na Linuxu (YouTube). Jedná se o proprietární software pro zátěžové testování a monitorování hardwaru.
Společnost OpenAI představila AI modely o3 a o4-mini (𝕏).
Canonical vydal Ubuntu 25.04 Plucky Puffin. Přehled novinek v poznámkách k vydání. Jedná se o průběžné vydání s podporou 9 měsíců, tj. do ledna 2026.
aaa;200 bbbb;350 cc;467a druhý:
aaa;1 bbbb;2 cc;3Potřeboval bych je porovnat a vytvořit třetí soubor který bude vypadat takto:
1;aaa;200 2;bbbb;350 3;cc;467Půjde to nějak jednoduše v bashi nebo awkem?
#!/bin/sh cat $1 |while read line1 do pattern=`echo $line1 | cut -f 1 -d ";"` line2=`grep $pattern $2` echo `echo $line2 | cut -f 2 -d ";"`";$line1" doneako parameter tomu daj prvy a druhy subor, este je potrebne osetrovat return code grepu (ak by nahodou nenaslo hladany vzor v druhom subore, neviem ako to chces)
aaa;200 bbbb;350 cc;467a druhý:
cc;1 aaa;2 bbbb;3Tzn. když to bude různě proházené, tak ten skriptík nedube fungovat, proto sem psal v nadpisu "porovnání" souborů... Doufám, že jsem to napsal srozumitelně...
join -t ';' -o '2.2 1.1 1.2' <(sort file1) <(sort file2)
bash
, ale pouze sh
, tak ekvivalentní jemkfifo fifo1 fifo2 sort <file1 >fifo1 & sort <file2 >fifo2 & join -t ';' -o '2.2 1.1 1.2' fifo1 fifo2 rm fifo1 fifo2
perl -e 'sub p(){chomp;split /;/, $_, 2} open F, "<$ARGV[0]"; while(<F>){($k,$v) = p; $t{$k}=$v} close F; open F, "<$ARGV[1]"; while(<F>){($k,$v) = p; print "$v;$k;$t{$k}$/"} close F' file1 file2případně jako script
#!/usr/bin/env perl @ARGV >= 2 or die 'Not enough paramters'; sub p () { chomp; split /;/, $_, 2 } open F, "<$ARGV[0]" or die "Can't open $ARGV[0] for readin"; while(<F>){ ($k,$v) = p; $t{$k}=$v } close F; open F, "<$ARGV[1]" or die "Can't open $ARGV[1] for readin"; while(<F>){ ($k,$v) = p; print "$v;$k;$t{$k}$/" } close F
perl -e 'sub p(&$){open F, shift @ARGV;while(<F>){chomp;($k,$v)=split /;/,$_,2;&{$_[0]}}close F}p{$t{$k}=$v};p{print "$v;$k;$t{$k}$/"}' file1 file2Je fakt, že to jde určitě napsat ještě méně čitelně, ale na mistry oboru ještě dlouho mít nebudu.
perl -e 'sub p(&){open F,shift @ARGV;while(<F>){chomp;($k,$v)=split /;/,$_,2;&{$_[0]}}close F}p{$t{$k}=$v};p{print "$v;$k;$t{$k}$/"}' file1 file2Kdo chce ušetřit ještě pár znaků, může vynechat
close F
IFS=';' while read key rest do echo "$rest;$(grep "^$key;" "$1")" done <"$2"
uniqprefix=yuwg IFS=';' while read key rest do eval "$uniqprefix$key=$rest" done <"$1" while read key rest do var="$uniqprefix$key" [ -n "${!var}" ] && echo "$rest;$key;${!var}" done <"$2"Dvě drobné záludnosti, je nutnost definovat jednoznačný prefix a první cyklus se nesmí spustit jako subproces. Takže ani žádné roury. Jde to samozřejmě vyřešit pro bash (
... done < <(filter "$1")
) i pro sh (teda pokud to celé vůbec v sh funguje).
join -t ';' -o '2.2 1.1 1.2' file1 file2
join -t ';' -o '2.2 1.1 1.2' <(echo -e 'aaa;200\nbbbb;350\ncc;467') <(echo -e 'aaa;1\nbbbb;2\ncc;3')
To je zajímavé, kolik je na jeden problém řešení. Ještě tu nebyl awk, zde tedy je:
cat vstup1.txt vstup2.txt | awk ' BEGIN { FS = ";" } /^$/ { druhySoubor = 1; } /.+/ { if ( druhySoubor ) { pole[ $1 ] = $2 ";" pole[ $1 ]; } else { pole[ $1 ] = $0; } } END { for ( i in pole ) { print pole[ i ]; } } ' | \ sort -n -t";" -k1
(egrep -v '^$' file1; echo; egrep -v '^$' file2) | awk ...Ale musím uznat, že to už je fakt maso
perl -ne 'chomp;m/^$/&&++$d&&next;($k,$v)=split /;/,$_,2;$d?print "$v;$k;$t{$k}$/":($t{$k}=$v)'Osobně se mi to ale moc nelíbí.
Tiskni
Sdílej: