比较两个文本文件并创建第三个文本文件,其中行使用通用字符串(相邻字符串完成)格式化

比较两个文本文件并创建第三个文本文件,其中行使用通用字符串(相邻字符串完成)格式化

我有 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]
  }
}

相关内容