【问题标题】:Comparing 2 text files (only compare specific things)比较 2 个文本文件(只比较特定的东西)
【发布时间】:2017-01-05 07:21:53
【问题描述】:

我正在编写一个收集数据的脚本。

我的文件 A.txt 如下所示:

PRS3152_1 00e0f4106f39
EAQ3152_1 00E0F40E0A28
POR3152_1 00E0F45E0AAB
KLQ3152_1 00e0f4406e10
SWG3152_1 00e0f57Ae125

文件 B.txt 如下所示:

00E0F40E0A28 00E0F45E0AAB 00e0f4406e10 00e0f4106f39

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

【问题讨论】:

  • 你找到任何部分了吗?如何读取文件?如何搜索数据?怎么删东西?表现出一些努力,社区很乐意为您提供进一步的帮助。
  • 我发现了如何比较文件,但不知道如何比较这种情况下的具体内容。就像我说的“我不熟悉 powershell”。我真的是powershell中的菜鸟。对不起,如果我看起来很懒,但我真的不知道。

标签: powershell compare text-files


【解决方案1】:
$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"

在一点帮助下,我设法解决了这个问题。不过还是谢谢你

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多