Vergleichen und Ignorieren von Zeilen, die in einer Datei fehlen


1

Ich möchte zwei Dateien unterscheiden und Zeilen ignorieren, die in einer Datei vorhanden sind, in der anderen jedoch fehlen.

Zum Beispiel

Datei1:

foo
bar
baz
bat

Datei2:

foo
ball
bat

Ich führe momentan den folgenden diff-Befehl aus

diff File1 File2 --changed-group-format='%>' --unchanged-group-format=''

Was in diesem Fall produzieren würde

bar
baz

als Ausgabe, dh nur fehlende oder widersprüchliche Zeilen. Ich möchte nur widersprüchliche Zeilen drucken, dh Fälle ignorieren, in denen eine Zeile in Datei2 fehlt und in Datei1 vorhanden ist (nicht umgekehrt). Gibt es eine Möglichkeit, so etwas mit diff zu tun, oder muss ich auf andere Tools zurückgreifen? Wenn ja, was würden Sie empfehlen?


1
Wenn Ihre Eingabedateien sortiert werden könnten, commkönnte der Befehl das tun, was Sie wollen (vorausgesetzt, er ist unter cygwin verfügbar)
Brian Swift

Antworten:


2

Sie können sich auch Folgendes ansehen comm, wenn Sie es zur Verfügung haben:

comm [-1] [-2] [-3 ] file1 file2
-1 Suppress the output column of lines unique to file1.
-2 Suppress the output column of lines unique to file2.
-3 Suppress the output column of lines duplicated in file1 and file2.

Die Eingabedateien sollten sortiert sein. Sie können das Standardverhalten jedoch mit der Option --nocheck-order ändern, falls verfügbar.

In deinem Fall würdest du wollen comm --nocheck-order -23 file filter_file


0

Wenn Sie Konflikt sagen, meinen Sie damit Einträge, die sowohl in Datei1 als auch in Datei2 erscheinen?

Verwenden Sie in diesem Fall Folgendes:

Erstellen Sie ein Shell-Skript mit dem Namen mycmopare.sh und fügen Sie das Folgende ein.

#!/bin/bash
File1Contents=$(cat File1)

for i in $File1Contents; do
   grep $i File2
done

Führen Sie mycompare.sh in dem Verzeichnis aus, in dem File1 und File2 gespeichert sind.

Ausgabe:

foo
bat
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.