在连接文件时定义行尾并删除双引号

时间:2016-06-27 09:01:49

标签: powershell

我需要使用PowerShell将多个文本文件(跳过标题)连接成一个大文件。目前我正在使用此命令:

nil

我现在有两个问题:

  • 如何定义行尾?它将自动使用Get-Content *.txt | Select-String -Pattern "^[1-9]" | Select-Object line | Export-Csv mybigfile.txt ,我只需要像源文件一样CRLF
  • 如何删除双引号?它会自动在每行以及源文件中已经双引号的列周围添加双引号。

示例:

来源输入:

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

当前输出:

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

期望的输出:

3145,"blabla",4568,""LF

2 个答案:

答案 0 :(得分:1)

PowerShell cmdlet使用系统的默认行终止符(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()

答案 1 :(得分:0)

Get-ChildItem cmdlet与-Filter参数一起使用以检索所有文本文件,使用Get-Content加载内容并使用Select-Object cmdlet和{跳过第一行{1}}参数。

然后您有一个字符串数组,您可以通过-skip连接在一起,最后使用Out-File cmdlet编写该文件:

LF