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