Выборка данных из txt
Имеется txt файл, в котором в каждой строке находится запись "Количество: 658" (количество в каждой строке может быть любое от 0 до 100000).
Нужно выбрать строки и сохранить их в отдельный txt файл где Количество больше 500. Буду очень благодарен за помощь. |
PowerShell:
Код:
Get-Content file.txt | Where {[int]$_.split(":")[1].Trim() -gt 500} | Out-File result.txt |
PowerShell:
Код:
$sSourceFile = "E:\Песочница\0333\Source.txt" |
Iska, Создаётся почету пустой txt
Kazun, скрипт выполняется с ошибкой так как берет сразу первую запись из строки, но в ней другие данные. |
Ошибку можно игнорировать, т.к. файл будет создан, для исключения:
Код:
Get-Content file.txt | Where {$_ -match "Количество:" -and [int]$_.split(":")[1].Trim() -gt 500} | Out-File result.txt |
Kazun, еще есть проблема число после символа ":" иногда есть с пробелом например "10 000"
можно как то пробелы игнорировать? |
Код:
Get-Content file.txt | Where {$_ -match "Количество:" -and [int]$_.split(":")[1].replace(" ","") -gt 500} | Out-File result.txt |
Kazun, все равно ошибка
Не удается преобразовать значение "3*109" в тип "System.Int32". Ошибка: "Входная строка имела неверный формат." J:\a.ps1:4 знак:64 + Get-Content $sSourceFile | Where {[int]$_.split(":")[1].replace <<<< (" ","") -gt 500} | Out-File $sDestFile + CategoryInfo : NotSpecified: (:) [], RuntimeException + FullyQualifiedErrorId : RuntimeException |
3*109 - Теперь и умножение требуется?
|
Kazun, "нет 3 109" с пробелом.
Сюда скопировал неверно. В общем в значениях где есть пробел между цифрами, Ошибка Не удается преобразовать значение в тип "System.Int32". Ошибка: "Входная строка имела неверный формат." |
Пример:
PS > gc 1.txt Количество: 658 Привет Количество: 1000 Количество: 500 Количество: 1 Количество: 10 0000 Вывод: Код:
PS > Get-Content 1.txt | Where {$_ -match "Количество:" -and [int]$_.split(":")[1].replace(" ","") -gt500} |
Kazun, Пример строк:
Текст Текст Текст значения: 543 43 значения_еще: 543 43 Количество: 54 403 Еще какой то текст |
Код:
Get-Content file.txt | Where {$_ -match "Количество: (\d+ ?\d+)" | Where {[int]$matches[1].Replace(' ','') -gt 500}} | Out-File result.txt |
Kazun, работает, но если в "Количество: (находится значения от 1 до 9 )
То Ошибка: Не удается индексировать в массив NULL |
Не тот код вставляете, здесь нет массива и подобной ошибки не должно возникать.
|
Код что вы мне дали
Код:
Get-Content J:\3.txt | Where {$_ -match "Количество: (\d+ ?\d+)" | Where {[int]$matches[1].Replace(' ','') -gt 500}} | Out-File J:\save.txt скриншот с ошибкой http://4.firepic.org/4/images/2013-1...pcfbzt5vc1.png |
Тогда приведите строку на которой возникает ошибка.
|
в такой строке ошибка
Код:
Текст Текст Текст значения: 543 43 значения_еще: 543 43 Количество: 1 Еще какой то текст Код:
Текст Текст Текст значения: 543 43 значения_еще: 543 43 Количество: 10 Еще какой то текст |
Код:
Get-Content J:\3.txt | Where {$_ -match "Количество: (\d+ ?\d+)"} | Where {[int]$matches[1].Replace(' ','') -gt 500} | Out-File J:\save.txt |
теперь без ошибок, но если значения больше 500 то в save.txt не сохраняет.
Предыдущий скрипт сохранял |
Такого результата я не могу получить:
PS > gc 1.txt Текст Текст Текст значения: 543 43 значения_еще: 543 43 Количество: 54 403 Еще какой то текст Текст Текст Текст значения: 543 43 значения_еще: 543 43 Количество: 303 Еще какой то текст Текст Текст Текст значения: 543 43 значения_еще: 543 43 Количество: 603 Еще какой то текст Текст Текст Текст значения: 543 43 значения_еще: 543 43 Количество: 1 Еще какой то текст Текст Текст Текст значения: 543 43 значения_еще: 543 43 Количество: 1 111 Еще какой то текст PS > gc 1.txt | Where{$_ -match "Количество: (\d+ ?\d+)"} | Where {[int]$matches[1].Replace(' ','') -gt 500} Текст Текст Текст значения: 543 43 значения_еще: 543 43 Количество: 54 403 Еще какой то текст Текст Текст Текст значения: 543 43 значения_еще: 543 43 Количество: 603 Еще какой то текст Текст Текст Текст значения: 543 43 значения_еще: 543 43 Количество: 1 111 Еще какой то текст Вывод из консоли: gc J:\3.txt | Where{$_ -match "Количество: (\d+ ?\d+)"} | Foreach {[int]$matches[1].Replace(' ','')} |
Все работает
БОЛЬШОЕ СПАСИБО!!! |
Kazun, завидую Вашему долготерпению.
KarpovStas, если бы Вы сразу привели пример реального файла, тема бы не расползлась на три страницы. |
Время: 11:48. |
Время: 11:48.
© OSzone.net 2001-