Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Создание .bat файла для выборки строк из .csv файла в .xlsx

Ответить
Настройки темы
CMD/BAT - Создание .bat файла для выборки строк из .csv файла в .xlsx

Новый участник


Сообщения: 22
Благодарности: 1

Профиль | Отправить PM | Цитировать


Суть такова. Есть 6 csv файлов с разными именами, в них по 4 столбца. В первом столбце мак хэш сетевого устройства, во втором дата и время (чч.мм.гггг чч:мм), в третьем уровень сигнала (-25 например), в четвертом название устройства.
Необходим скрипт (он будет в папке с csv файлами), при запуске которого в csv файле с именем "C46E1F5A5DD4" во втором столбце будут искаться ячейки где перерыв во времени составляет больше 5 минут.
Выглядит этот столбец так:
61C5CDFAF15E602BA6FBF558497AD741 09.12.2015 11:35 -53 nokia
8F5B5E1AFE81B77705310942D9A5ED15 09.12.2015 11:35 -75 samsung
DC34B0E1B18874CE58AA9C81FB468340 09.12.2015 11:35 -69 samsung
D4F0561F459F304F7BB77E42F7C2F096 09.12.2015 11:35 -69 samsung
D2D6DB4EF7C69060CA87934F930E23BA 09.12.2015 11:35 -80 samsung
0E3E3642F5275969DBDE043823F95B30 09.12.2015 11:43 -52

A10AE2D6CD32B0CAD6505E29ABADCB18 09.12.2015 11:43 -75 local
DD9AF3BB214ED6AD3301956BAFB0AB74 09.12.2015 11:43 -72 apple
Жирным текстом выделены строки перерыв между которыми составляет больше 5 минут.
Нужно чтобы скрипт нашел все эти строки в файле csv, для него создал xlsx файл и вогнал обе эти строки в этот xlsx файл.
Всего строк в этих файлах по 40-50 тысяч, визуально все строки просмотреть и вычислить где-же интервал составляет более 5 минут - очень тяжко.
Глаза буквально вываливаются из орбит.
Помогите пожалуйста, очень вас я прошу.

Отправлено: 14:07, 10-12-2015

 

Пользователь


Сообщения: 122
Благодарности: 6

Профиль | Отправить PM | Цитировать


Цитата GODolubOFF:
создал xlsx файл
cmd так не может

средствами экзеля делается не сложно вроде(создается таблица и поля туда тянуться с условиями из других файлов)

Отправлено: 14:38, 10-12-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


GODolubOFF, С помощью PowerShell (это быстрей, чем вручную):
Код: Выделить весь код
$csv = (get-content C46E1F5A5DD4.csv) -replace '(\s)+','$1' | foreach {

	[pscustomobject] @{

		hesh = $_.split()[0]
		date = [datetime]($_.split()[1,2] -join ' ')
		freq = $_.split()[3]
		brеnd = $_.split()[4]

	}
}

0..($csv.length - 1) | foreach {

	if ($check)
	{
		if (($csv[$_].date - $check).minutes -ge 5)
		{
			[array] $new_csv += $csv[($_-1)]
			$new_csv += $csv[$_]
			$check = $null
		}
	}

	else { $check = $csv[$_].date }

}

$new_csv | convertto-csv -notypeinfo | out-file new.csv
А потом new.csv уже открыть в Excel (здесь я не уверен, за отсутствием офиса)
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:02, 10-12-2015 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
А потом new.csv уже открыть в Excel (здесь я не уверен, за отсутствием офиса) »
В 2003-м, по крайней мере, откроется, .csv ассоциируется именно с Microsoft Excel. Впрочем, на PoSH можно и xls сделать посредством Automation.

Отправлено: 15:40, 10-12-2015 | #4


Новый участник


Сообщения: 22
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
$csv = (get-content C46E1F5A5DD4.csv) -replace '(\s)+','$1' | foreach {
[pscustomobject] @{
hesh = $_.split()[0]
date = [datetime]($_.split()[1,2] -join ' ')
freq = $_.split()[3]
brеnd = $_.split()[4]
}
}
0..($csv.length - 1) | foreach {
if ($check)
{
if (($csv[$_].date - $check).minutes -ge 5)
{
[array] $new_csv += $csv[($_-1)]
$new_csv += $csv[$_]
$check = $null
}
}
else { $check = $csv[$_].date }
}
$new_csv | convertto-csv -notypeinfo | out-file new.csv »
Вогнал я код в Powershell - ругается.

PS C:\Users\Aleksandr> $csv = (get-content C46E1F07AF88.csv) -replace '(\s)+','$1' | foreach {
>>
>> [pscustomobject] @{
>>
>> hesh = $_.split()[0]
>> date = [datetime]($_.split()[1,2] -join ' ')
>> freq = $_.split()[3]
>> brеnd = $_.split()[4]
>>
>> }
>> }
>>
Не удается преобразовать значение "7:52:46;-65;" в тип "System.DateTime". Ошибка: "Строка не распознана как действитель
ное значение DateTime."
строка:2 знак:1
+ [pscustomobject] @{
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: ( [], RuntimeException
+ FullyQualifiedErrorId : InvalidCastParseTargetInvocationWithFormatProvider

Отправлено: 17:14, 10-12-2015 | #5


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Цитата GODolubOFF:
7:52:46;-65; »
В вашем примере нет разделителей ';'. Поэтому и ошибка. Выложите пример файла, только закройте его в тег 'code' или дайте ссылку на реальный файл (строк на 100)

Отправлено: 17:37, 10-12-2015 | #6


Новый участник


Сообщения: 22
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
В вашем примере нет разделителей ';'. Поэтому и ошибка. Выложите пример файла, только закройте его в тег 'code' или дайте ссылку на реальный файл (строк на 100) »
Ссылка на файл:
http://depositfiles.com/files/pmrnuqlx4

Отправлено: 17:45, 10-12-2015 | #7


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


GODolubOFF, Попробуйте, я особо результат не проверял, но что-то на выходе похожее на правду получается:
Код: Выделить весь код
$csv = import-csv -delimiter ';' -header 'Hash','DateTime','SignalLevel','Brand' C46E1F07AF88.csv
$check = [datetime] $csv[0].datetime

1..($csv.count-1) | foreach {

	if (([datetime] $csv[$_].datetime - $check).minutes -ge 5)
	{
		[array] $new_csv += $csv[($_-1)]
		$new_csv += $csv[$_]
		$check = [datetime] $csv[$_].datetime
	}

}

$new_csv | convertto-csv -notypeinfo | out-file new.csv

Отправлено: 18:47, 10-12-2015 | #8


Новый участник


Сообщения: 22
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
$csv = import-csv -delimiter ';' -header 'Hash','DateTime','SignalLevel','Brand' C46E1F07AF88.csv
$check = [datetime] $csv[0].datetime
1..($csv.count-1) | foreach {
if (([datetime] $csv[$_].datetime - $check).minutes -ge 5)
{
[array] $new_csv += $csv[($_-1)]
$new_csv += $csv[$_]
$check = [datetime] $csv[$_].datetime
}
}
$new_csv | convertto-csv -notypeinfo | out-file new.csv »
Всё круто, реально работает, только вот выборка идет не по минутам, а по секундам. Разница в секундах не интересует, интересует разница в минутах, а точнее те строки, где разница составляет больше 5 минут.
Вот, то что на выходе получилось:
http://depositfiles.com/files/dqeso2y2x

Отправлено: 10:11, 11-12-2015 | #9


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


GODolubOFF, Я правильно понял, что, например 08:00:59 и 08:05:00 попадают в результирующий файл? Тогда:
Код: Выделить весь код
$csv = import-csv -delimiter ';' -header 'Hash','DateTime','SignalLevel','Brand' C46E1F07AF88.csv
$check = [datetime] $csv[0].datetime.replace(':\d{2}$',$null)

1..($csv.count-1) | foreach {

	if ((([datetime] $csv[$_].datetime.replace(':\d{2}$',$null)) - $check).minutes -gt 5)
	{
		[array] $new_csv += $csv[($_-1)]
		$new_csv += $csv[$_]
		$check = [datetime] $csv[$_].datetime.replace(':\d{2}$',$null)
	}

}

$new_csv | convertto-csv -notypeinfo | out-file new.csv
Вы написали больше 5 минут, если надо больше или равно, то исправьте -gt на -ge

Последний раз редактировалось Foreigner, 11-12-2015 в 12:52.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:45, 11-12-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Создание .bat файла для выборки строк из .csv файла в .xlsx

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Создание bat файла c помощью другого bat файла GODolubOFF Скриптовые языки администрирования Windows 11 03-01-2016 20:30
CMD/BAT - Создание bat файла для работы с файлами. Bugaga321 Скриптовые языки администрирования Windows 2 22-04-2015 22:37
CMD/BAT - [решено] Создание CSV файла Miravild Скриптовые языки администрирования Windows 9 04-11-2013 22:04
PowerShell - [решено] Замена строк из файла строками из файла в файле bcubbs@fb Скриптовые языки администрирования Windows 6 24-01-2013 17:22
CMD/BAT - Запуск BAT файла с правами локального пользователя из сетевого BAT файла Yurii_L Скриптовые языки администрирования Windows 9 05-09-2012 14:27




 
Переход