2016-06-27 2 views
1

Мне нужно объединить несколько текстовых файлов (пропустить заголовки) в один большой файл с помощью PowerShell. В настоящее время я использую эту команду:Определить конец строки и удалить двойные кавычки при конкатенации файлов

Get-Content *.txt | 
    Select-String -Pattern "^[1-9]" | 
    Select-Object line | 
    Export-Csv mybigfile.txt 

теперь у меня есть два вопроса:

  • Как определить конец строки? Он будет автоматически использовать CRLF, и мне нужно только LF, как в исходных файлах.
  • Как удалить двойные кавычки? Он автоматически добавит двойные кавычки вокруг каждой строки и вокруг столбцов, которые уже дважды указаны в исходных файлах.

Пример:

Источник входного сигнала:

h1,h2,h3,h4 
3145,"blabla",4568,""LF

Выход по току:

"3145,""blabla"",4568,""""CRLF

Желаемый выход:

3145,"blabla",4568,""LF
+0

Можете ли вы предоставить две записи образцов, фактический выход и желаемый результат? –

ответ

1

PowerShell командлеты использовать строки по умолчанию терминатор системы (CR-LF), так что они не может делать то, что вы хотите. Используйте вместо этого StreamWriter:

$reader = New-Object IO.StreamReader 'C:\path\to\input.txt' 
$writer = New-Object IO.StreamWriter ('C:\path\to\output.txt', $true) 

# override default line terminator 
$writer.NewLine = "`n" 

# skip first line of input file 
if ($reader.Peek() -ge 0) { 
    $reader.ReadLine() | Out-Null 
} 

while ($reader.Peek() -ge 0) { 
    $writer.WriteLine($reader.ReadLine()) 
} 

$reader.Close(); $reader.Dispose() 
$writer.Close(); $writer.Dispose() 
+0

Немного сложнее, чем я думал, но он работает. Благодарю. – DoubleT28

0

Используйте командлет Get-ChildItem с параметром -Filter для извлечения всех текстовых файлов, загрузки содержимого с помощью Get-Content и пропустите первую строку с помощью командлета Select-Object и параметра -skip.

Вы затем строковый массив, который вы можете присоединиться вместе LF и, наконец, записать файл, используя Out-File команду:

$output = Get-ChildItem 'your_path_here' -Filter '*.txt' | Foreach { $_ | Get-Content | Select -Skip 1 } 
$output -join "`n" | out-file 'mybigfile.txt' 
+0

Спасибо, Мартин, это почти работает. Последняя строка по-прежнему заканчивается CRLF вместо LF. – DoubleT28

+0

Хм, возможно, попробуйте командлет 'Set-Content' вместо' Out-File' –

+0

Любой из них добавляет CR-LF к выходу. –

Смежные вопросы