我有许多大型“配置”文本文件,其中包含旧网络上的 IP 地址 [路由器配置。交换机配置。防火墙配置等。]
配置文件可能看起来像这样,其中的乱码是一些其他重要但不相关的字符串。
“asdhlksdjfkdlsh sldkhdlfh旧 IP 地址 1sdalkjhdslkfhkhdasf sadkhjksdafh sdafkhkjdhfsakjhkdjfsa sadfk
adsfkjhkjdsf adfhjhjakds旧 IP 地址 400哈哈哈哈
adskjhkhkhkjh旧 IP 地址 10“
配置中的 IP 地址txt 文件没有任何特定顺序。
我还有一个包含很多数据列的 Excel 表。C 列 = 旧 IP 地址列表(例如第 1 行:172.10.10.44,第 2 行:...等等,直到第 500 行)E 列 = 新 IP 地址列表(例如第 1 行:10.10.10.58,第 2 行:....,等等,直到第 500 行)
我想用适当的“新” IP 地址替换文本文件中的所有“旧” IP 地址。文本文件的其余部分必须保持原样。只有旧 IP 地址需要用新 IP 地址替换。
怎么做?我想象会有一些迭代过程,其中 find 函数必须从 C 列 excel 中获取旧 ip 地址并在记事本/txt 文件中搜索它,然后将其替换为与 excel 中旧 ip 地址位于同一行但来自 E 列的新 ip 地址。然后重复此操作,逐行遍历 excel 表,直到所有行都用尽。
记事本++?Python?VBA?等等?
答案1
如果你有数百个 IP 地址:
对 C 列中的“旧” IP 地址进行排序,确保 E 列也随之排序
使用与对 C 列进行排序时选择的相同排序标准对“旧” IP 地址的文本文件列表进行排序
在排序列 C 旁边创建新的空白列
将文本文件中已排序的数据(旧 IP 地址)粘贴到与已排序列 C 相邻的新空白列中
检查新列和排序列 C 中的数据以确保数据匹配
如果您想要一个包含新 IP 地址的新文本文件,请将 E 列中的数据复制到新文本文件中
答案2
我使用了一个包含您的三个示例的文本文件和第二个文件 XLSX,其中 C 列中的三个“旧 IP 地址”的顺序与上面的顺序不同。“新 IP 地址”位于 E 列,与 C 列的顺序一致。
我选择让它们按照这个顺序排列,因为你提供了相当充分的信息,而且你不太可能不按照相同的顺序排列它们,而不提及这个事实。如果是这样的话,我也不明白它怎么会起作用,所以... 也有这个!
我使用的 XLSX 文件名为“Book 3.xlxs”,显然,您需要对其进行编辑以符合您的名称。文本文件会打开并立即转换为 Excel 文件。(假设您可以成功将其作为 Excel 文件打开。然后将其保存回标准文本文件格式或您找到的 .TXT 格式。)但是,如果需要,您可以采用更复杂的方式执行此操作。由于可能性很多,我不会深入探讨这一点。
我使用的公式是:
=SUBSTITUTE(A1, INDEX([Book3]Sheet1!$C$2:$C$4,XMATCH(1000000,SEARCH([Book3]Sheet1!$C$2:$C$4,A1,1),-1),1), INDEX([Book3]Sheet1!$E$2:$E$4,XMATCH(1000000,SEARCH([Book3]Sheet1!$C$2:$C$4,A1,1),-1),1))
有三个基本部分:1)SUBSTITUTE
完成最终工作的,2)第一个INDEX/XMATCH
在源数据中查找 OLDIPADDRESS 的部分,3)INDEX/XMATCH
为每一行的源数据查找新的部分。
在每种情况下,都是INDEX/XMATCH
标准INDEX/MATCH
样式构造。重要的是SEARCH
其中的部分。SEARCH
用于针对所有旧 IP 地址测试任何给定行的文本数据。其中一个将给出一个数字,其余的将给出一个错误。XMATCH
(不是MATCH
因为它不能这样做)用于寻找数字 1,000,000,该数字将大于任何值SEARCH
可以产生的数字,因为 Excel 单元格可以包含的字符数是有限的。匹配类型为“精确,或下一个更小”,因此它会找到唯一的数字结果。该结果是被检查行的数据单元格中的旧 IP 地址匹配的 C 列数据的行。
然后另一个也INDEX/XMATCH
做同样的事情来找到新 IP 地址对应的行。
这两个部分彼此独立运行,如果使用其中一个部分来支持另一个部分,这通常不是一个好主意,但在这种情况下,唯一的缺点是,可能需要对另一个子句进行编辑(例如,为了升级它)。例如,范围必须保持同步。
最后,SUBSTITUTE
开始用新地址替换旧地址。
此时,您将拥有一个新列,其中所有旧地址都已被新地址替换。
如上所述,您似乎提供了一套完整的信息,所以我没有提供任何“如果错误,请执行此操作”的方式……如果没有更多信息,我真的无法做到这一点。由于没有理由地址不能在文本文件中多次出现,因此其行数远大于 XLSX 文件中的行数既不是不可能也不是不合理的。但是,如果存在或可能存在与新 IP 信息不匹配的 TXT 文件数据,您需要提供一条由于不匹配而导致错误的路径,以将这些行中的原始数据传送到新列。
最后,您将复制新列并将其作为值 ( Paste|Special|Values
) 粘贴到原始列的上方。为避免 TXT 文件的困难(复杂性),请在 XLSX 文件中创建替换列。如果需要,只需在之后关闭它而不保存即可。