Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Скрипт локальная синхронизация с дописыванием информации. (http://forum.oszone.net/showthread.php?t=343025)

Corecess 20-11-2019 23:44 2897354

Скрипт локальная синхронизация с дописыванием информации.
 
Здравствуйте! Помогите, пожалуйста, со скриптом. Вопрос в следующем:
Есть постоянно изменяющийся файл. csv. Нужно чтобы этот файл синхронизировался в такой же файл, но в другой папке. При синхронизации информация, которая пропала в основном файле, пропадает и в том, куда синхронизируется. А нужно, что б информация не пропадала, а если появилась новая, то новая дописывалась. Я не сильна в этом, буду очень благодарна за помощь!

Iska 21-11-2019 00:49 2897360

Corecess, тогда это ни разу не «синхронизация». То, что Вы описываете, попадает под категорию «Работа с базами данных».

Упакуйте Ваш .csv-файл в архив, каковой приложите к сообщению.

Corecess 21-11-2019 03:17 2897367

Вложений: 1
Прилагаю архив. Это аудит беспроводных сетей. Точки доступа синхронизируют такие файлы на сервер. Проблема в том, что при потере устройств из вида их адреса в файле также удаляются. При перезагрузке точек доступа синхронизируется пустой файл, соответственно. Поэтому нужен такой скрипт, как я описала выше. Буду крайне признательна за помощь.

DJ Mogarych 21-11-2019 09:18 2897378

CSV-файлом это можно назвать с натяжкой, так как он нормально не структурирован, т. е., столбцы идут один под другим.
Вы хотите просто добавлять информацию в общий файл?

Powershell:
Код:

gc C:\temp\1\test.csv-01.csv |Out-File C:\temp\123.txt -Append

Corecess 21-11-2019 11:13 2897392

Да, не структурирован. В принципе, да, добавлять, но что б записывалась только новая информация. Что б было, наверное, что-то вроде сравнениея, если такой адрес в файле уже есть, то он пропускается, если нет, записывается. Или это уже целую программу надо писать?

DJ Mogarych 21-11-2019 15:00 2897408

Адрес какой - MAC? Из какой колонки?

Все файлы одинаково выглядят, или все разные?

Исходный файл всё-таки один или их много?

Как должен выглядеть финальный файл?

Iska 21-11-2019 18:10 2897431

Corecess, почему у Вас две строки наименований? Чем и как формируется данный файл?

Цитата:

Цитата Corecess
Или это уже целую программу надо писать? »

Писать «целую программу» надо в любом случае.

Corecess 21-11-2019 19:24 2897441

Две строки. Первый список - это MAC адреса точек доступа. Второй список - две колонки MAC адресов - это подключенные устройства и к каким точкам доступа подключены. Если ни к каким, во второй колонке not associated.
Файл формируется точкой доступа, линуксовским пакетом airodump-ng и синхронизируется на машину с виндовс. Т.е. если точка доступа перезагружается, то файл становится чистым. Соответственно на машине виндовс файл тоже становится чистым, теряются все данные. Нужно, чтобы эти данные не терялись.
Как я это видела - файл на виндовс, который синхронизируется с точкой доступа, в какой-то промежуток времени копируется в другую папку. Такой скрипт уже есть, спасибо DJ Mogarych.
Что бы не было тысячи файлов, файл должен дописываться, проверяя при этом совпадения и дописывать только те адреса, у которых нет совпадений, то есть новые.
Возможно, это должно выглядеть не так.

Файл всегда в таком виде, в каком есть. Файл один.

Дополню, что количество MAC адресов точек доступа будет меняться, как и количество адресов подключенных устройств

DJ Mogarych 21-11-2019 21:35 2897462

Наверное, можно было бы поизящнее, но это работает.

Powershell:
Код:

$srcf = gc 'C:\temp\1\test.csv-01.csv'
$apstemp = 'C:\temp\1\apstemp.csv'
$clientstemp = 'C:\temp\1\clientstemp.csv'
$apsf = 'C:\temp\1\aps.csv'
$clientsf = 'C:\temp\1\clients.csv'

$srcf.where({$_ -notmatch "[\w\d]"},'Until') |ConvertFrom-Csv |export-csv "$apstemp" -NoTypeInformation -Append
$srcf.where({$_ -notmatch "[\w\d]"},'SkipUntil') |ConvertFrom-Csv |export-csv "$clientstemp" -NoTypeInformation -Append

import-csv "$apstemp" |sort BSSID -Unique |export-csv "$apsf" -NoTypeInformation -Delimiter ';'
import-csv "$clientstemp" |sort 'Station MAC' -Unique |export-csv "$clientsf" -NoTypeInformation -Delimiter ';'

Типов файлов два: один - точки доступа, другой - клиенты.
Каждый из этих типов имеет два вида - временный файл, где просто всё добавляется, и результирующий, где есть только уникальные значения.
Результирующий файл имеет разделитель точку с запятой, т. к. такой файл сразу нормально открывается в Экселе.

Iska 21-11-2019 22:09 2897467

Цитата:

Цитата Corecess
Что бы не было тысячи файлов, файл должен дописываться, проверяя при этом совпадения и дописывать только те адреса, у которых нет совпадений, то есть новые. »

Corecess, это так не работает.

Первый вопрос: есть ли прямая и критическая зависимость между содержимым каких-то строк под первым заголовком, и содержимым каких-то строк под вторым заголовком? Есть ли между ними неразрывная связь?

Corecess 22-11-2019 01:51 2897474

DJ Mogarych,

Спасибо! Работает!
Но смотрите, если устройство появилось в сети второй раз, тогда у него стоит другое время/флаги/мощность, и он дописывается еще раз, т.к. совпадение действительно не найдено. Возможно не учитывать эти данные? В конечном итоге мне нужны только уникальные мак адреса, если это упростить задачу. Или после выполнения этого скрипта, когда все размечено в таблице, выполнить еще один, взять адреса только из столбца А, получается, и еще раз прогнать их через сравнение/запись для получения только уникальных адресов. Возможно, я говорю глупости.

Iska, при формировании файла точкой доступа есть. В конечном итоге, нет, нужны только уникальные мак адреса.

DJ Mogarych 22-11-2019 08:48 2897482

Corecess, ещё раз: в файлах clientstemp.csv и apstemp.csv содержатся все данные.
В файлах clients.csv и aps.csv - только уникальные мак-адреса.

Corecess 22-11-2019 12:02 2897509

Вложений: 1
DJ Mogarych, моя ошибка, голова уже забита была.

Вот смотрите, попробуйте скрипт с этим файлом. С тем, что был вначале, скрипт работает. Вот новый файл, с этим файлом вносится только clients.csv, aps.csv пустой, почему-то. Файл такого же формата и такой же структуры.

DJ Mogarych 22-11-2019 12:15 2897510

А потому что файл другой - у него первая строка пустая. Добавил дополнительную обработку исходного файла, чтобы пустые строки, если они есть вначале, удалялись.

Код:

$srcf = (gc 'C:\temp\1\test.csv-01.csv').where({$_ -match "[\w\d]"},'skipuntil')
$apstemp = 'C:\temp\1\apstemp.csv'
$clientstemp = 'C:\temp\1\clientstemp.csv'
$apsf = 'C:\temp\1\aps.csv'
$clientsf = 'C:\temp\1\clients.csv'

$srcf.where({$_ -notmatch "[\w\d]"},'Until') |ConvertFrom-Csv |export-csv "$apstemp" -NoTypeInformation -Append
$srcf.where({$_ -notmatch "[\w\d]"},'SkipUntil') |ConvertFrom-Csv |export-csv "$clientstemp" -NoTypeInformation -Append

import-csv "$apstemp" |sort BSSID -Unique |export-csv "$apsf" -NoTypeInformation -Delimiter ';'
import-csv "$clientstemp" |sort 'Station MAC' -Unique |export-csv "$clientsf" -NoTypeInformation -Delimiter ';'


Corecess 22-11-2019 17:07 2897553

DJ Mogarych, действительно, другой. Все работает, спасибо большое за помощь!


Время: 17:18.

Время: 17:18.
© OSzone.net 2001-