Войти

Показать полную графическую версию : поиск по части IP адреса в CSV файле


God-of-Chaos
05-11-2017, 16:04
есть первый список - список IP адресов, из этих IP адресов нам необходимы только первые три октета, получаем данный список состоящий только из первых трех октетов следующим образом:


$ALL_IP_ADDRESS = @(Get-Content -Path "C:\Users\Admin\Desktop\list1.txt")
$result_mas=@() #создаем пустой массив

foreach ($IP in $ALL_IP_ADDRESS)
{
$result = $IP.Remove($IP.LastIndexOf('.'))
$result_mas += $result

}

$result_mas | Select-Object -Unique | Set-Content -PassThru "C:\Users\Admin\Desktop\list_octet1.txt"



есть второй список - файл csv состоящий из IP адресов и описания с разделителем ";"
необходимо взять первые три октета из первого списка и сравнить со вторым списком, и если есть совпадение записать данные в файл в виде
первые три октета из первого списка - строчка из второго файла
если есть несколько совпадений, то должно быть:
первые три октета из первого списка - строчка из второго файла
- строчка из второго файла
- строчка из второго файла

примеры файлов во вложении

Kazun
06-11-2017, 00:23
gc list1.txt | % {$f = gc list2.csv}{
$ip = $_ -replace "\.\d+$"
if(($r = $f -match $ip)) {$ip+" - " +($r -join "`n- ")}
}

God-of-Chaos
06-11-2017, 09:50
$ip = $_ -replace "\.\d+$" »

А можно чуть подробнее, что в данном случае выполняется?

Iska
06-11-2017, 10:45
А можно чуть подробнее, что в данном случае выполняется? »
А просто взять и посмотреть, не? Быстрее ж будет.

Из строки с IP-адресом удаляется последняя часть тетрады (вместе с точкой). Для поиска используется шаблон регулярного выражения.




© OSzone.net 2001-2012