GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie vergleiche ich zwei Dateien und füge dann eine Zeile an, die keine teilweise Übereinstimmung ist?

Ich versuche, zwei Dateien zu vergleichen (Extensions.txt und Temp.txt ). Wenn es eine Zeile gibt, die nicht teilweise mit Extensions.txt übereinstimmt in Temp.txt Ich möchte die fehlende Zeile an Temp.txt anhängen .

Extensions.txt (Sehr einfach, eine Spalte):

111
1234
4321

Temp.txt :

1234/sip:[email protected]:5060  9421b96c5e   Avail   1.480
4321/sip:[email protected]:5060  e9b6b979a4   Avail   1.855

Grundsätzlich möchte ich eine Übereinstimmung finden, die auf allem vor dem / basiert in der ersten Spalte und wenn es keine Übereinstimmung gibt, möchte ich die nicht übereinstimmende Zeile an das Ende der Datei drucken, damit sie so endet:

1234/sip:[email protected]:5060 9421b96c5e Avail 1.480
4321/sip:[email protected]:5060 e9b6b979a4 Avail 1.855
111

Bisher habe ich es mit grep -v versucht und es bringt nicht die gewünschten Ergebnisse, ich habe es auch mit awk versucht und es scheint, als wäre das der richtige Weg, aber ich verstehe nicht ganz, wie awk funktioniert funktioniert, um die entsprechenden Ergebnisse zu erzielen.

Akzeptierte Antwort:

Sie können die Dateien mit awk parsen

awk -F '/' '
    FNR == NR {seen[$1] = $0; next}
    {if ($1 in seen) print seen[$1]; else missing[$1]}
    END {for (x in missing) print x}
' Temp.txt Extensions.txt

Ausgabe:

1234/sip:[email protected]:5060 9421b96c5e Avail 1.480
4321/sip:[email protected]:5060 e9b6b979a4 Avail 1.855
111
  • Feldtrennzeichen auf Schrägstrich setzen, -F '/'
  • Die Aktion nach FNR == NR wird für die Zeilen der ersten Eingabedatei ausgeführt. Wir speichern die Zeilen im assoziativen Array seen als Tasten und gehen Sie zu next Linie.
  • Die zweite Aktion wird für die zweite Datei ausgeführt, wenn FNR != NR . Wenn das erste Feld übereinstimmt, drucken wir die gespeicherte Zeile, else wir speichern das Feld in einem anderen Array missing .
  • Am END , drucken wir die fehlenden Zeilen.

Linux
  1. So komprimieren Sie Dateien und Verzeichnisse unter Linux (mit Beispielen)

  2. So fügen Sie Textdateien unter Linux Zeilennummern hinzu

  3. So verbinden Sie zwei Textdateien unter Linux

  4. Wie fügt man mehrere Zeilen an eine Datei an?

  5. Wie kopiert man Dateien unter Linux und Unix? 10 cp Befehlsbeispiele

So entfernen Sie Dateien und Verzeichnisse mit der Linux-Befehlszeile

Wie man Textdateien unter Linux vergleicht und zusammenführt

Wie man Textdateien unter Linux vergleicht und zusammenführt (Teil 2)

So verwenden Sie den cp-Befehl zum Kopieren von Dateien und Verzeichnissen

So vergleichen Sie zwei Dateien im Linux-Terminal

Verwenden des Diff-Befehls zum Vergleichen zweier Dateien im Linux-Terminal