Vergleichen Sie zwei Zeilen in einer Datei und ändern Sie die letzte

Vergleichen Sie zwei Zeilen in einer Datei und ändern Sie die letzte

Ich habe eine Datei mit zwei Zeilen wie:

XXXXXXX20170412,bu.1519=1,bu.1124=2,bu.1284=3,bu.1767=13,bu.1869=15,bu.1784=16,bu.1473=32,bu.1264=43,bu.1758=96,bu.1649=122,bu.1345=140,bu.1268=215,bu.1246=516,bu.1876=601,
XXXXXXX20170413,bu.1123=1,bu.1767=27,bu.1784=32,bu.1473=57,bu.1869=41,bu.1264=91,bu.1284=54,bu.1758=191,bu.1268=387,bu.1345=319,bu.1649=322,bu.1246=1199,bu.1876=1383,

Ich möchte alle Zeichenfolgen abrufen, die in der ersten Zeile vorhanden sind (beginnend mit einer Zeichenfolge zwischen ", und=") und in der letzten Zeile nicht vorhanden sind, und sie an das Ende der letzten Zeile anhängen.

Antwort1

Bilden Sie einen Hash %h, dessen Schlüssel Zeichenfolgen zwischen ,und sind =. Dies wird nur für die erste Zeile gebildet. Dann suchen wir in der zweiten Zeile, ob diese Schlüssel in der 2. Zeile vorhanden sind, sammeln die nicht gefundenen und joinverknüpfen sie mit einem Komma.

perl -F, -lpe '
   $. == 1 and %h = /,([^=]*)=([^,]*)/g, next;
   $l = $_;
   $_ .= join ",", grep $l !~ /,\Q$_=/, keys %h;
' your_2-line_file

Ergebnis

XXXXXXX20170412,bu.1519=1,bu.1124=2,bu.1284=3,bu.1767=13,bu.1869=15,bu.1784=16,bu.1473=32,bu.1264=43,bu.1758=96,bu.1649=122,bu.1345=140,bu.1268=215,bu.1246=516,bu.1876=601,
XXXXXXX20170413,bu.1123=1,bu.1767=27,bu.1784=32,bu.1473=57,bu.1869=41,bu.1264=91,bu.1284=54,bu.1758=191,bu.1268=387,bu.1345=319,bu.1649=322,bu.1246=1199,bu.1876=1383,bu.1519,bu.1124

Antwort2

Ich würde die Datei in zwei Teile aufteilen, von denen jeder eine der Zeilen enthält. Ich würde die Zeilen dann am Komma aufteilen. Dann führe ich einen Diff-Befehl aus, kopiere die Ergebnisse und füge sie wieder zu einer Zeile zusammen.und violett.

Das ist der lange Weg. Ich bin sicher, Sie könnten eine Art awkSkript oder etwas Ähnliches schreiben, um es auf einen Schlag zu erledigen.

verwandte Informationen