Войти

Показать полную графическую версию : [решено] Чтение вывода файла со 2 строки и по 3 строку снизу


ownsmir
26-10-2020, 17:41
Здравствуйте умы нашей планеты. Прошу помочь с мелким вопросом, но инфы толковой найти не удается. Да и время поджимает.
Суть в чем команда
$export = cmd /c """$csptest"" -keyset -enum -fqcn -verifycontext -machinekeys" |out-file C:\Users\*\Desktop\1\keys.txt -enc utf8
выводит список ЭЦП с флешки в файл, но программа csptest.exe добавляет свою техническую инфу в файл, и соответственно дальнейшая обработка файла той же программой эту информацию использует и ругается...
Короче вывод команды

CSP (Type:80) v4.0.9019 KC1 Release Ver:4.0.9963 OS:Windows CPU:AMD64 FastCode:READY:AVX. (НЕ нужная для команд инфа)
AcquireContext: OK. HCRYPTPROV: 16650576 (НЕ нужная для команд инфа)
\\.\FAT12_T\************(НУЖНАЯ для команд инфа)
\\.\FAT12_T\************(НУЖНАЯ для команд инфа)
OK. (не нужная для команд инфа)
Total: SYS: 0,063 sec USR: 0,047 sec UTC: 0,105 sec (НЕ нужная для команд инфа)
[ErrorCode: 0x00000000] (НЕ нужная для команд инфа)

Очень надо чтобы либо вывод в файл был только результата команды без тех. инфы (2 строки сверху, и последние 3 строки в конце файла)
или если это невозможно, то взять из файла диапазон только результата команды без тех. инфы (2 строки сверху, и последние 3 строки в конце файла) и может перезаписать в другой файл или в тот же
Как то так.
Не пинайте сильно ...

Foreigner
26-10-2020, 18:14
Вывод команды проверить не могу, поэтому из файла.


(Get-Content keys.txt) -match '^\\\\' | Set-Content keys.txt

greg zakharov
26-10-2020, 18:23
ownsmir, объяснение таково, что без бутылки не разобраться.
На счёт csptest.exe не в курсе; теоретически можно лишь предположить: либо указаны лишние ключи, либо должен быть ключ отсеивающий "мусор", хотя если нет ни того ни другого, скорее всего - план "Б". Однако прежде, не могли бы вы более чётко сформулировать свою мысль какие именно строки и куда. Давайте на некотором примере. Допустим, есть файл содержания:
1 not
2 not
3 need
4 need
5 not
6 not
7 not
8 need
9 need
0 need
Из него нужно вынуть строки 3 и 4, а также с 8 по 0. Сделать это можно, например, так:
($$=Select-String '\S' X:\path\in.txt).Where{
$_.Linenumber -in (3,4 + ($$.Count - 2)..$$.Count)
}.Line | Out-File X:\path\out.txt

Vadikan
26-10-2020, 18:25
без тех. инфы (2 строки сверху, и последние 3 строки в конце файла) »
Не вникая в содержимое файла, просто по строкам можно выбрать из массива
$a = @(Get-Content -Path keys.txt)
$i = 2
while ($i -le [int]($a.length-4)) {
$a[$i] | Out-File -Append keys-new.txt
$i++
}
Это не очень эффективно, зато любой может осилить, т.к. while и основы массивов проходят еще на уроках информатики, наверное :)

ownsmir
27-10-2020, 09:18
ownsmir, объяснение таково, что без бутылки не разобраться.
На счёт csptest.exe не в курсе; теоретически можно лишь предположить: либо указаны лишние ключи, либо должен быть ключ отсеивающий "мусор", хотя если нет ни того ни другого, скорее всего - план "Б". Однако прежде, не могли бы вы более чётко сформулировать свою мысль какие именно строки и куда. Давайте на некотором примере. Допустим, есть файл содержания:
Код:
1 not
2 not
3 need
4 need
5 not
6 not
7 not
8 need
9 need
0 need »

Извиняюсь) Показалось расписал подробно) Попробую расписать конкретнее:
Вывод в файл команды содержит тех информацию, ее нужно исключить из файла.
Файл (на примере выше) выглядит так:

1 not
2 not
3 need
4 need
5 need
6 need
7 not
8 not
9 not

т.е. команда вроде статично вставляет тех информацию в первые 2 строки и последние 3, строк между началом и концом, всегда разное количество.
собственно задача, как раз, строки между началом (после 2 строки) и концом (до 3х строк до конца) либо вывести в другой файл, либо перезаписать существующий, либо использовать из файла только этот диапазон строк.

Цитата ownsmir:
без тех. инфы (2 строки сверху, и последние 3 строки в конце файла) »
Не вникая в содержимое файла, просто по строкам можно выбрать из массива
Код:
$a = @(Get-Content -Path keys.txt)
$i = 2
while ($i -le [int]($a.length-4)) {
$a[$i] | Out-File -Append keys-new.txt
$i++
}
Это не очень эффективно, зато любой может осилить, т.к. while и основы массивов проходят еще на уроках информатики, наверное :) »

Спасибо огромное! Работает!

ownsmir
27-10-2020, 09:35
ownsmir, объяснение таково, что без бутылки не разобраться.
На счёт csptest.exe не в курсе; теоретически можно лишь предположить: либо указаны лишние ключи, либо должен быть ключ отсеивающий "мусор", хотя если нет ни того ни другого, скорее всего - план "Б". Однако прежде, не могли бы вы более чётко сформулировать свою мысль какие именно строки и куда. Давайте на некотором примере. Допустим, есть файл содержания:
Код:
1 not
2 not
3 need
4 need
5 not
6 not
7 not
8 need
9 need
0 need
Из него нужно вынуть строки 3 и 4, а также с 8 по 0. Сделать это можно, например, так:
Код:
($$=Select-String '\S' X:\path\in.txt).Where{
$_.Linenumber -in (3,4 + ($$.Count - 2)..$$.Count)
}.Line | Out-File X:\path\out.txt »

Так же и Вам спасибо большое! Уверен Ваш вариант так же рабочий. но вариант Vadikan показался проще для моего понимания)

DJ Mogarych
27-10-2020, 09:36
Возможно, более продуктивным будет не выбирать нужные строки, а исключать ненужные. Например (powershell):

(gc "D:\temp\csp.txt") -notmatch "^CSP|^AcquireContext|^OK|^Total|^.ErrorCode"

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

Vadikan
28-10-2020, 15:28
вариант Vadikan показался проще для моего понимания) »
Ок, значит не зря написал:)

На самом деле Get-Content автоматически создает массив строк, т.е. его даже не надо объявлять, и первая строка могла быть просто
$a = Get-Content -Path keys.txt
Но я счел, что исходный вариант будет нагляднее (меньше магии).




© OSzone.net 2001-2012