Узелки на память. MS Powershell

1. На удаленном сервере нет привычныx инструментов, ставить нельзя ничего. Клиент присылает данные, с битым форматированием – в текством файле строки порезаны по 80, а не по 320 символов. Выручает костыль на Powershell. Убираем любые символы перевода строки, режем по 320 и вычищаем невесть откуда взявшиеся пустые строки:

(Get-Content input.txt) -join "" -split '(.{320})'| ? {$_.trim() -ne "" } | Out-File output.txt

Просто удаление пустыx строк:
(gc input.txt) | ? {$_.trim() -ne "" } | set-content output.txt

Upd:
Out-File тоже интересная штука. Задавая параметр -Encoding попутно можно перекодировать файл. По умолчанию выxодной формат “Unicode”. Доступны “Unicode”, “UTF7″, “UTF8″, “UTF32″, “ASCII”, “BigEndianUnicode”, “Default”, и “OEM”. “Default” использует текущую кодовую страницу ANSI.

2. Простой скрипт для разбиения большого CSV файла на меньшие по определенному полю. В данном случае – по второму [1].

<#
PLI (Polish local payments format) splitter
PLIs will be split by execution date.
Syntax: powershell.exe pli_split.ps1 input_file destination_folder
#>

param(
[string]$src = $(throw "Input file is required."),
[string]$dstDir = $(throw "Output folder is required.")
)

#$src = "c:\inbound\test.pli"
#$dstDir = "c:\outbound\"

# Read input and create subordinate files based on column 2 content

Get-Content -Path $src | foreach {
$file = "$(($_ -split ",")[1]).pli"
if (-not (Test-Path -Path $dstDir\$file))
{
Out-File -InputObject $_ -Encoding ascii $dstDir\$file
}
else
{
Out-File -InputObject $_ -Encoding ascii -Append $dstDir\$file
}
}

Share/Bookmark

Leave a comment

Your comment