比較 2 個文字檔案並建立第三個文字文件,其中行使用通用字串進行格式化(相鄰字串完成)

比較 2 個文字檔案並建立第三個文字文件,其中行使用通用字串進行格式化(相鄰字串完成)

我有 2 個文字檔。
文字1.txt:
首先是這樣建構的

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

文字2.txt
第二個文字檔的結構如下

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

請問有沒有辦法創建一個新的第三文字文件,但結構如下

<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##

換句話說,腳本(powershell、批次或某些比較程序)應該檢查兩個文字檔案之間是否存在公共字串,並且在掃描它們之後,它應該將這些特定字串連接到新行中。
例如,在兩個第一的第二文字檔案有這些常見的字串

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

如果這是真的那麼你應該加入這些字串

hhppKJt.png
MchrzjL.zip

以這種方式豐富第一個文字檔案的相關行

<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##

答案1

#! /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]
  }
}

將以上所有內容放入腳本中,例如。 join.sh,並使該腳本可執行。使用兩個檔案名稱作為參數呼叫腳本,例如:

./join.sh text1.txt text2.sh

試著滿足 m:n 比率:

#! /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]
  }
}

相關內容