Zeilen mit Bash zusammenfügen

Bei Linux am Dienstag hatten wir diesmal zwar keine größeren Vorträge zu Linuxprogrammen, aber dennoch etwas neues für die meisten Shellfanatiker: paste .

Zeilen mit Bash zusammenfügen

Nehmen wir mal diese Daten einer beliebigen Datei oder Shellausgabe:

Username:		User1
	0.00 MB
Username:		User#2
	0.07 MB
Username:		User3
	4630.98 MB
Username:		User#4
	209.16 MB
Username:		User5
	583.70 MB
Username:		User#6
	896.46 MB
Username:		User7
	809.58 MB
Username:		User#8
	902.74 MB
Username:		User9
	136.84 MB
Username:		User#10
	9156.09 MB
Username:		User11
	372.55 MB
Username:		User#12
	77.75 MB

Wir haben also in den ungerade Zeilen 1,3,5… usw. den Text „Username:<TAB>UserX<LF>“ stehen und in den geraden Zeilen „<TAB>2134 MB<LF>“. Diese Zeilen sollen zusammengefügt werden, daß Username und Anzahl der MB in einer Zeile mit 2(3) Spalten steht:

Username:		User1		0.00 MB
Username:		User#2		0.07 MB
Username:		User3		4630.98 MB
Username:		User#4		209.16 MB
Username:		User5		583.70 MB
Username:		User#6		896.46 MB
Username:		User7		809.58 MB
Username:		User#8		902.74 MB
Username:		User9		136.84 MB
Username:		User#10		9156.09 MB
Username:		User11		372.55 MB
Username:		User#12		77.75 MB

Wie bekommt man das hin?

Da geb es erst einmal einen kleinen Dämpfer, als wir versuchten die <LF> mit sed zu ersetzen, was nicht funktionierte und selbst wenn es funktioniert hätte, nicht die Lösung gewesen wäre, weil dann alles in einer Zeile gestanden hätte: sed -e „s/\n//g“ können wir also vom Plan streichen 🙂

Eine kreative Lösung kam dann von Matthias:

$ cat daten.txt | xargs echo | sed -e "s/MB /MB\n/g" | sed -e "s/ /\t/g"
Username:	User1	0.00	MB
Username:	User#2	0.07	MB
Username:	User3	4630.98	MB
Username:	User#4	209.16	MB
Username:	User5	583.70	MB
Username:	User#6	896.46	MB
Username:	User7	809.58	MB
Username:	User#8	902.74	MB
Username:	User9	136.84	MB
Username:	User#10	9156.09	MB
Username:	User11	372.55	MB
Username:	User#12	77.75	MB

Weil es einfacher war damit umzugehen, standen die Ausgangsdaten in einer Textdatei „daten.txt“.

„xargs echo“  gibt jede Zeile der Datei mit echo einzeln aus. Darauf hin wird sed so ausgeführt, daß der resultierende Textblock „…MB “ zu „…MB<LF>“ wird und alle Leerzeichen zu Tabulatoren <TAB>.

Das ist schon einmal eine Möglichkeit, aber es geht einfacher:

$ cat daten.txt | paste - -
Username:		User1		0.00 MB
Username:		User#2		0.07 MB
Username:		User3		4630.98 MB
Username:		User#4		209.16 MB
Username:		User5		583.70 MB
Username:		User#6		896.46 MB
Username:		User7		809.58 MB
Username:		User#8		902.74 MB
Username:		User9		136.84 MB
Username:		User#10		9156.09 MB
Username:		User11		372.55 MB
Username:		User#12		77.75 MB

Es gab keine Vorgabe, daß alle Leerzeichen verschwinden sollten. Wäre das eine Vorgabe gewesen, hätte man am Ende noch das | sed -e „s/ /\t/g“ dranhängen müssen.

$ cat daten.txt | paste - - |  sed -e "s/ /\t/g"
Username:		User1		0.00	MB
Username:		User#2		0.07	MB
Username:		User3		4630.98	MB
Username:		User#4		209.16	MB
Username:		User5		583.70	MB
Username:		User#6		896.46	MB
Username:		User7		809.58	MB
Username:		User#8		902.74	MB
Username:		User9		136.84	MB
Username:		User#10		9156.09	MB
Username:		User11		372.55	MB
Username:		User#12		77.75	MB

oder etwas schlanker:

$ cat daten.txt | paste - - |  sed -e "s/\t\t/ /g" -e "s/ /\t/g"
Username:	User1	0.00	MB
Username:	User#2	0.07	MB
Username:	User3	4630.98	MB
Username:	User#4	209.16	MB
Username:	User5	583.70	MB
Username:	User#6	896.46	MB
Username:	User7	809.58	MB
Username:	User#8	902.74	MB
Username:	User9	136.84	MB
Username:	User#10	9156.09	MB
Username:	User11	372.55	MB
Username:	User#12	77.75	MB

Merke: paste aus den CoreUtilities kann zwei oder mehr Zeilen einer Ausgabe zusammenfügen.

Linux am Dienstag: Programm für den 15.3.2022

Eine Woche ist rum, ich hoffe alle haben min. eine Partie „Remnands of the Precursor“ aka Remake von „Masters of Orion“ durch 🙂

Linux am Dienstag: Programm für den 15.3.2022

Diese Woche haben wir u.a. zwei Root Exploits für den Linuxkernel in Programm:

  • Kernel – Schwachstelle in LTS Kernel 5.4 entdeckt
  • Kernel – DirtyPipe bedroht Kernel 5.8 bis 5.16
  • Sicherheit – Samsungs Netzwerk geknackt – Sourcecode im Umlauf
  • Technik – CPU arbeitet intern mit Licht statt Elektronen
  • Telekom VOIP – Fritz!Box braucht spezielles Update zum Telefonieren

Wie jede Woche per Videokonferenz auf https://meet.cloud-foo.de/Linux .

Kleine Anmerkung: Die bisherigen Vorträge findet man jetzt unter https://linux-am-dienstag.de/archiv/ .

„Entschuldigung für die vielen Security Fixe“

Aus der Schmunzelecke von Fedora … könnte man meinen …

Update Chromium to 99.0.4844.51. Fixes, well, a LOT of security bugs. Sorry
about that.  CVE-2021-22570 CVE-2022-0096 CVE-2022-0097 CVE-2022-0098
CVE-2022-0099 CVE-2022-0100 CVE-2022-0101 CVE-2022-0102 CVE-2022-0103
CVE-2022-0104 CVE-2022-0105 CVE-2022-0106 CVE-2022-0107 CVE-2022-0108
CVE-2022-0109 CVE-2022-0110 CVE-2022-0111 CVE-2022-0112 CVE-2022-0113
CVE-2022-0114 CVE-2022-0115 CVE-2022-0116 CVE-2022-0117 CVE-2022-0118
CVE-2022-0120 CVE-2022-0789 CVE-2022-0790 CVE-2022-0791 CVE-2022-0792
CVE-2022-0793 CVE-2022-0794 CVE-2022-0795 CVE-2022-0796 CVE-2022-0797
CVE-2022-0798 CVE-2022-0799 CVE-2022-0800 CVE-2022-0801 CVE-2022-0802
CVE-2022-0803 CVE-2022-0804 CVE-2022-0805 CVE-2022-0806 CVE-2022-0807
CVE-2022-0808 CVE-2022-0809

… ist es aber nicht 🙁

„Entschuldigung für die vielen Security Fixe“

Der Hintergrund ist, daß vor einigen Tagen festgestellt wurde, daß Chromium bei Securityfixen weit hinten lag bei Fedora, weil wichtige Security-Fixe nicht durch Updates verteilt wurden. Der Maintainer war leider nicht so aktiv, wie es das Projekt erfordert.

Das wurde nun offensichtlich von Tom nachgeholt, der in der Vergangenheit eigentlich als sehr aktiver Maintainer aufgefallen war. Man weiß nicht, was dazu führte und spekulieren will ich da auch nicht.

Ich fordere analog zum Sysadmin-Tag noch den Maintainer-Tag einzuführen. Wer nicht so lange warten will, kann seinen Lieblingsmaintainern ja auch einfach mal ein dickes „Thank You“ per Email schicken, was deutlich zur Langzeitmotivation der Menschen beiträgt, die für uns die Arbeit machen!

Und so kommt man die Mailadressen ran

Unter Fedora ist das relativ einfach: Entweder Ihr abonniert die Package-Announce Mailingliste „package-announce@lists.fedoraproject.org“ oder Ihr schaut ins Changelog des Pakets auf Eurem PC rein:

# rpm -qi –changelog httpd | grep „@“ | head -n 1
* Do Okt 07 2021 Patrick Uiterwijk <patrick@puiterwijk.org> – 2.4.51-1

Ich glaube, den muß ich auch mal motivieren 😀