比较 2 个文本文件(仅比较特定内容)



我正在处理一个收集数据的脚本。

我有文件A.txt看起来像这样:

PRS3152_1 00e0f4106f39EAQ3152_1 00E0F40E0A28POR3152_1 00E0F45E0AABKLQ3152_1 00e0f4406e10SWG3152_1 00e0f57Ae125

文件B.txt如下所示:

00E0F40E0A2800E0F45E0AAB00e0f4406e1000e0f4106f39

如何检查 B.txt 的 MAC 地址是否存在于 A.txt?之后,脚本应删除 A.txt 中不存在 MAC 地址的行。

$content1 = Get-Content "D:B.txt"
$content2 = Get-Content "D:A.txt"
$useFile = "D:%%%%%useFile%%%%%.txt"
$doesntexist = $true
foreach($line in $content2)
{
    $doesntexist = $true
    $lineCut = $line.Remove(0,17)
    foreach($line2 in $content1)
    {
        if($lineCut -like $line2)
        {
            $doesntexist = $false
        }
    }
    if($doesntexist -eq $false)
    {
        Add-Content $useFile $line
    }

}
Remove-Item "D:A.txt"
Rename-Item "D:%%%%%useFile%%%%%.txt" "A.txt"

在一点帮助下,我设法解决了它。但无论如何谢谢你<3

请注意,我们通常不会回答没有显示您解决问题的任何代码/努力的问题。这次我破例了,因为这个问题很简单,但不要指望这种情况经常发生。

将 B.txt 读入数组,然后对照该阵列检查 A.txt 的每一行的 MAC 地址,并仅将这些行写回具有匹配项的文件:

# ForEach-Object and Where-Object are to remove whitespace and empty lines
$list = Get-Content 'C:pathtoB.txt' |
        ForEach-Object { $_.Trim() } |
        Where-Object { $_ }
(Get-Content 'C:pathtoA.txt') | Where-Object {
    $list -contains ($_ -split 's+')[1]
} | Set-Content 'C:pathtoA.txt'

Get-Content两边的括号是必需的,否则您将无法写回同一文件(因为它仍在读取)。

相关内容

  • 没有找到相关文章

最新更新