我正在处理收集数据的脚本。
我的文件A.txt看起来像这样:
PRS3152_1 00e0f4106f39 EAQ3152_1 00E0F40E0A28 POR3152_1 00E0F45E0AAB KLQ3152_1 00e0f4406e10 SWG3152_1 00e0f57Ae125
并且文件B.txt看起来像这样:
00E0F40E0A28 00E0F45E0AAB 00e0f4406e10 00e0f4106f39
如何检查A.txt中的MAC地址是否存在于A.txt中? 之后,脚本应该删除A.txt中不存在MAC地址的行。
答案 0 :(得分:0)
$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
答案 1 :(得分:0)
请注意,我们通常不会回答您无法解决问题的任何代码/工作的问题。我这次做了一个例外,因为问题很简单,但不要指望这种情况经常发生。
将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
周围的括号是必需的,否则你将无法回写同一个文件(因为它仍在被读取)。