Vergleichen Sie 2 Textdateien und erstellen Sie eine 3. Textdatei, in der die Zeilen mit gemeinsamen Zeichenfolgen formatiert sind (Vervollständigung benachbarter Zeichenfolgen)

Vergleichen Sie 2 Textdateien und erstellen Sie eine 3. Textdatei, in der die Zeilen mit gemeinsamen Zeichenfolgen formatiert sind (Vervollständigung benachbarter Zeichenfolgen)

Ich habe 2 Textdateien.
text1.txt:
First ist folgendermaßen strukturiert

<title>Developing a wireless </title> ##www.google.com##
<title>Webdriver Actionchains </title> ##www.alfa.com##
<title>Populating a DataGridViewComboBox </title> ##www.beta.com##

text2.txt
Die zweite Textdatei ist wie folgt aufgebaut

hhppKJt.png ##www.beta.com##
MchrzjL.zip ##www.google.com##

Ich frage, ob es eine Möglichkeit gibt, ein neuesdritteTextdatei, aber so strukturiert

<title>Developing a wireless </title> ##www.google.com## MchrzjL.zip
<title>Populating a DataGridViewComboBox </title> ##www.beta.com## hhppKJt.png
<title>Webdriver Actionchains </title> ##www.alfa.com##

Mit anderen Worten: Ein Skript (PowerShell, Batch oder ein Vergleichsprogramm) sollte prüfen, ob es eine gemeinsame Zeichenfolge zwischen zwei Textdateien gibt, und nach dem Scannen sollte es diese spezifischen Zeichenfolgen zu neuen Zeilen zusammenfügen.
Beispielsweise in beidenErsteUndzweiteTextdatei gibt es diese gemeinsamen Zeichenfolgen

##www.beta.com##
##www.google.com##

Wenn dies zutrifft, sollten Sie diese Zeichenfolge verbinden

hhppKJt.png
MchrzjL.zip

Anreicherung der relativen Zeilen der ersten Textdatei auf diese Weise

<title>Developing a wireless </title> ##www.google.com## MchrzjL.zip
<title>Populating a DataGridViewComboBox </title> ##www.beta.com## hhppKJt.png
<title>Webdriver Actionchains </title> ##www.alfa.com##

Antwort1

#! /usr/bin/awk -f

BEGIN {
  C=0;
}
{
  if (ARGIND == 1) {
     X = $NF
     T0[$NF] = C++
     $NF = ""
     T1[X] = $0
  } else {
     X = $NF
     T0[$NF] = C++
     $NF = ""
     T2[X] = $0
  }
}

END {
  for (X in T0) {
    print T1[X],X,T2[X]
  }
}

Fügen Sie alle oben genannten Informationen in ein Skript ein, z. B. join.sh, und machen Sie dieses Skript ausführbar. Rufen Sie das Skript mit zwei Dateinamen als Parameter auf, z. B.:

./join.sh text1.txt text2.sh

Versuch, m:n-Verhältnisse zu berücksichtigen:

#! /usr/bin/awk  -f

BEGIN {
  OFS=FS=";"
  C=0;
}
{
  if (ARGIND == 1) {
     X = $NF
     T0[$NF] = C++
     $NF = ""
     if (T1[X]) {
        T1[X] = T1[X] $0
     } else {
        T1[X] = $0
     }
  } else {
     X = $NF
     T0[$NF] = C++
     $NF = ""
     if (T2[X]) {
        T2[X] = T2[X] $0
     } else {
        T2[X] = $0
     }
  }
}

END {
  for (X in T0) {
    # concatenate T1[X] and X, since T1[X] ends with ";"
    print T1[X]  X, T2[X]
  }
}

verwandte Informationen