2016-06-27 3 views
1

複数のテキストファイル(ヘッダーをスキップ)をPowerShellを使用して1つの大きなファイルに連結する必要があります。現在、私は、このコマンドを使用しています:行の終わりを定義する方法をファイルの連結時に行の終わりを定義し、二重引用符を削除する

  • 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

2つのサンプルレコード、実際の出力と希望する出力を提供できますか? –

答えて

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

-Filterパラメータを使用してGet-ChildItemコマンドレットを使用してすべてのテキストファイルを取得し、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

マーティンありがとう、これはほとんど動作しています。最後の行はLFの代わりにCRLFで終了します。 – DoubleT28

+0

ええ、 'Out-File'ではなく' Set-Content'コマンドレットを試してみてください –

+0

どちらかがCR-LFを出力に追加します。 –

関連する問題