2 textdateien vergleichen und alle bestimmte Einträge löschen
2 textdateien vergleichen und alle bestimmte Einträge löschen
Datei A (von apt dist-upgrade zu entfernende Pakete)
Datei B (von apt dist-upgrade neu zu installierende Pakete)
--> Ausgabe Datei C mit allen <Paketname> aus A für die es in B kein <Paketname>t64 gibt.
Das schafft hier doch jemand auf einer Zeile?
Ziel des ganzen soll sein bei der derzeitigen noch unvollständigen transition (dist-) upgrades durchzuführen und dabei im Auge zu behalten was *ersatzlos* entfernt werden soll.
Datei B (von apt dist-upgrade neu zu installierende Pakete)
--> Ausgabe Datei C mit allen <Paketname> aus A für die es in B kein <Paketname>t64 gibt.
Das schafft hier doch jemand auf einer Zeile?
Ziel des ganzen soll sein bei der derzeitigen noch unvollständigen transition (dist-) upgrades durchzuführen und dabei im Auge zu behalten was *ersatzlos* entfernt werden soll.
gruß
michaa7
-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)
michaa7
-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)
Re: 2 textdateien vergleichen und alle bestimmte Einträge löschen
Zum Vergleich von zwei Textdateien (Konfigurationsdateien) kommt hier meld zum tragen. Aber ob das was für dich ist?
Gruß KH
Gruß KH
Re: 2 textdateien vergleichen und alle bestimmte Einträge löschen
Wenn du die Differenzmenge (A-B) suchst, also alle As, die nicht in B enthalten sind, dann würde ich mir mal `comm' anschauen.
Re: 2 textdateien vergleichen und alle bestimmte Einträge löschen
Ist zwar nicht direkt gefragt, aber ich möchte trotzten mal das Protokoll von aptitude ins Spiel bringen.
Da gibt es drei Kategorien:
Ergänzung: der Log stammt noch aus einer Zeit, als ich den "Update Indikator" nutzte.
Da kamen [INSTALL, DEPENDENCIES] dann oft mit ein paar Stunden Verspätung.
Dieser blinkende Icon animierte mich dann, mehrmals an Tag Upgrades zu machen.
Jetzt mach ich immer Morgens mein Update und gut ist.
Da gibt es drei Kategorien:
- [REMOVE, NOT USED] ---> wird entfernt. Pakete, die sich dann nicht in [INSTALL, DEPENDENCIES] mit anderer Versionsnummer wiederfinden, sind dann futsch.
- [INSTALL, DEPENDENCIES] ---> ersetzt [REMOVE, NOT USED] durch neue Version. Kann auch noch aus vorherigen Upgrades stammen, da noch nicht verfügbar
- [UPGRADE] --> das Normale halt
- [HOLD] neue Version eines Paketes erfüllt noch nicht die erforderliche Abhängigkeiten
Code: Alles auswählen
Will install 25 packages, and remove 13 packages.
7500 kB of disk space will be freed
========================================
[REMOVE, NOT USED] libdazzle-1.0-0:amd64 3.36.0-1
[REMOVE, NOT USED] libdigest-bubblebabble-perl:amd64 0.02-2
[REMOVE, NOT USED] libebml4v5:amd64 1:1.3.10-dmo1
[REMOVE, NOT USED] libemail-valid-perl:amd64 1.202-1
[REMOVE, NOT USED] libhandy-0.0-0:amd64 0.0.13-2
[REMOVE, NOT USED] libmatroska6v5:amd64 1:1.5.2-dmo1
[REMOVE, NOT USED] libnet-dns-perl:amd64 1.25-1
[REMOVE, NOT USED] libnet-dns-sec-perl:amd64 1.17-1
[REMOVE, NOT USED] libnet-ip-perl:amd64 1.26-2
[REMOVE, NOT USED] libperl4-corelibs-perl:amd64 0.004-2
[REMOVE, NOT USED] libprotobuf-lite22:amd64 3.11.4-5
[REMOVE, NOT USED] libtext-levenshtein-perl:amd64 0.13-1
[REMOVE, NOT USED] libx264-160:amd64 4:0.160.3009+git4c9b076-dmo1
[INSTALL, DEPENDENCIES] libebml5:amd64 1:1.4.0-dmo1
[INSTALL, DEPENDENCIES] libmatroska7:amd64 1:1.6.0-dmo1
[INSTALL, DEPENDENCIES] libprotobuf-lite23:amd64 3.12.3-2
[UPGRADE] busybox:amd64 1:1.30.1-4 -> 1:1.30.1-5
[UPGRADE] gir1.2-polkit-1.0:amd64 0.105-26 -> 0.105-28
[UPGRADE] libnm0:amd64 1.25.91-2 -> 1.26.0-1
[UPGRADE] libpolkit-agent-1-0:amd64 0.105-26 -> 0.105-28
[UPGRADE] libpolkit-gobject-1-0:amd64 0.105-26 -> 0.105-28
[UPGRADE] libvlc-bin:amd64 1:3.0.11-dmo2 -> 1:3.0.11-dmo4
[UPGRADE] libvlc5:amd64 1:3.0.11-dmo2 -> 1:3.0.11-dmo4
[UPGRADE] libvlccore9:amd64 1:3.0.11-dmo2 -> 1:3.0.11-dmo4
[UPGRADE] network-manager:amd64 1.25.91-2 -> 1.26.0-1
[UPGRADE] policykit-1:amd64 0.105-26 -> 0.105-28
[UPGRADE] vlc:amd64 1:3.0.11-dmo2 -> 1:3.0.11-dmo4
[UPGRADE] vlc-bin:amd64 1:3.0.11-dmo2 -> 1:3.0.11-dmo4
[UPGRADE] vlc-data:amd64 1:3.0.11-dmo2 -> 1:3.0.11-dmo4
[UPGRADE] vlc-l10n:amd64 1:3.0.11-dmo2 -> 1:3.0.11-dmo4
[UPGRADE] vlc-plugin-base:amd64 1:3.0.11-dmo2 -> 1:3.0.11-dmo4
[UPGRADE] vlc-plugin-notify:amd64 1:3.0.11-dmo2 -> 1:3.0.11-dmo4
[UPGRADE] vlc-plugin-qt:amd64 1:3.0.11-dmo2 -> 1:3.0.11-dmo4
[UPGRADE] vlc-plugin-samba:amd64 1:3.0.11-dmo2 -> 1:3.0.11-dmo4
[UPGRADE] vlc-plugin-skins2:amd64 1:3.0.11-dmo2 -> 1:3.0.11-dmo4
[UPGRADE] vlc-plugin-video-output:amd64 1:3.0.11-dmo2 -> 1:3.0.11-dmo4
[UPGRADE] vlc-plugin-video-splitter:amd64 1:3.0.11-dmo2 -> 1:3.0.11-dmo4
[UPGRADE] vlc-plugin-visualization:amd64 1:3.0.11-dmo2 -> 1:3.0.11-dmo4
========================================
Log complete.
Da kamen [INSTALL, DEPENDENCIES] dann oft mit ein paar Stunden Verspätung.
Dieser blinkende Icon animierte mich dann, mehrmals an Tag Upgrades zu machen.
Jetzt mach ich immer Morgens mein Update und gut ist.
Re: 2 textdateien vergleichen und alle bestimmte Einträge löschen
Datei A: a, b, c, d, e, f,tobo hat geschrieben:11.03.2024 08:47:04Wenn du die Differenzmenge (A-B) suchst, also alle As, die nicht in B enthalten sind, dann würde ich mir mal `comm' anschauen.
Datei B: at64, ct64, et64, g, h, i
Ergibnis als Datei C: b, d, f (= alle Dateinen aus A für die es in B keine Entsprechung+t64 gibt)
oder vllt verständlicher:
foo(aus A) UND NICHT foot64(aus B) = foo(nach C)
Korrigiert, danke.
Zuletzt geändert von michaa7 am 11.03.2024 13:46:00, insgesamt 2-mal geändert.
gruß
michaa7
-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)
michaa7
-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)
Re: 2 textdateien vergleichen und alle bestimmte Einträge löschen
Falls du b, d, f meinst und mit deiner Anpassung der Dateien A und B:
Code: Alles auswählen
$ comm -23 <(sort -u A) <(sed 's/t64$//' B | sort -u)
b
d
f
$
Re: 2 textdateien vergleichen und alle bestimmte Einträge löschen
in der Tat
Ok,
apt-to-be-removed kopiert nach "A", dann
Code: Alles auswählen
cat A | tr " " "\n" > AA
apt-to-be-installed kopieret nach "B", dann
Code: Alles auswählen
cat B| tr " " "\n" > BB
nun
Code: Alles auswählen
comm -23 <(sort -u AA) <(sed 's/t64$//' BB | sort -u)
Danke!
Und so verstehe ich das:
Aus man sed: s/RegAusdr/Ersatz/ und : "$ Passt auf die letzte Zeile"
wobei "letzte Zeile" wohl bedeutet "aktuell bearbeitet Zeile"? ... der Datei BB
Dort suche t64 und ersetze es mit nichts. Pipe das nach "sort" und sortiere das Ganze alphabetisch und ggf. nur einmal wenn mehrere gleiche.
"comm -23" = nur die erste Spalte=erste Datei=AA ausgeben
wobei Spalte 1 nur Zeilen anzeigt die exklusiv in Datei 1=AA vorkommen (die ZeilenNUMMER ist dabei offenbar egal! Deshalb alphabetisch, funktioniert wohl nach dem "erster-Treffer-Prinzip")
diesen Sed RegEx hätte ich nie hinbekommen ( das war rückwärts schon schwierig zu entziffern), aber "$" hinten anzuhängen, darauf wäre ich nicht gekommen und obwohl mir klar (?) ist dass "<" ne pipe in eine bestimmte Richtung ist weiß ich es trotzdem nicht anzuwenden. Den wirklich springenden Punkt zwischen "|", "<" und ">" raffe ich nicht, obwohl ich das schon mehrfach nachgelesen habe ... irgendwie nicht my cup of tea.
Nochmals Danke ... und ein bisschen was wird ja vllt doch hängen bleiben.
gruß
michaa7
-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)
michaa7
-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)
Re: 2 textdateien vergleichen und alle bestimmte Einträge löschen
Würde das $ vor dem Befehl (hier s(ubstitute) stehen, also z.B. sed '$s/t64//'), dann wäre es eine Adresse und würde die letzte Zeile ansprechen. Im Befehl selbst werden aber Zeilen verarbeitet und dann bezieht sich $ auf das Zeilenende. Wenn ansonsten keine t64 in den Paketnamen auftauchen, dann wäre $ sogar überflüssig.michaa7 hat geschrieben:11.03.2024 14:00:18Und so verstehe ich das:
Aus man sed: s/RegAusdr/Ersatz/ und : "$ Passt auf die letzte Zeile"
wobei "letzte Zeile" wohl bedeutet "aktuell bearbeitet Zeile"? ... der Datei BB
Sortiert und entfernt Dubletten. Also was man auch mit `sort | uniq' machen könnte,Dort suche t64 und ersetze es mit nichts. Pipe das nach "sort" und sortiere das Ganze alphabetisch und ggf. nur einmal wenn mehrere gleiche.
Sortiert, weil comm das vorgibt und auf sortiertem Ausgangsmaterial arbeitet. -2 entfernt alles, was nur in B ist und -3 entfernt alles, was sowohl in A als auch B ist."comm -23" = nur die erste Spalte=erste Datei=AA ausgeben
wobei Spalte 1 nur Zeilen anzeigt die exklusiv in Datei 1=AA vorkommen (die ZeilenNUMMER ist dabei offenbar egal! Deshalb alphabetisch, funktioniert wohl nach dem "erster-Treffer-Prinzip")
comm arbeitet mit 2 Dateien, hier liegen aber 2 Streams vor. Man könnte die beiden Streams also jeweils in eine Datei speichern (z.B. `sort -u A >AA') und dann mit `comm -23 AA BB' aufrufen oder man benutzt die Prozess-Substitution <(Kommandoliste) - den Ausgabestrom eines Prozesses als Eingabestrom eines anderen Prozesses. Es wird hier also das temporäre Anlegen zweier Dateien umgangen.und obwohl mir klar (?) ist dass "<" ne pipe in eine bestimmte Richtung ist weiß ich es trotzdem nicht anzuwenden.
Re: 2 textdateien vergleichen und alle bestimmte Einträge löschen
Nee ich hätte es, fälschlicherweise, $t64 statt richtig t64$ geschriebentobo hat geschrieben:11.03.2024 17:20:08
Würde das $ vor dem Befehl (hier s(ubstitute) stehen, also z.B. sed '$s/t64//'),
Prozess-Substitution <(Kommandoliste) ... das muss ich mir einfach mal so merken ....... oder man benutzt die Prozess-Substitution <(Kommandoliste) - den Ausgabestrom eines Prozesses als Eingabestrom eines anderen Prozesses. Es wird hier also das temporäre Anlegen zweier Dateien umgangen.
Danke nochmals.
gruß
michaa7
-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)
michaa7
-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)