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