我正在尝试使用Powershell规范化一组TAB分隔的日志文件。
这是当前的脚本:
(Get-ChildItem *.csv) |%{
#Store the name of the file & date
$Name = $_.basename
$FileDate = $_.CreationTime
#Prepends the following to each message: unique Identifer, Hostname, date
(Get-Content $_.fullname) -replace "^","AR-LOG|$Name|$FileDate|"|
#Replaces the TAB delimeter with a Pipe delimeter
Foreach-Object {$_ -replace ' ','|'} |
#Appends the resulting message in ascii
Out-File -append -FilePath normalized.log -Encoding ascii
输入的片段&输出可以在这里看到:
如何强制输出文件为ascii而不是某种类型的unicode? p>
***编辑:进一步的故障排除显示输入文件实际上是windows-1252编码,显然Get-Content本身无法处理(?)
答案 0 :(得分:3)
您应该能够像... | Out-File -encoding ascii myfile.txt
一样在out-file上使用编码标记。如果您使用的是append
,请确保所有附加内容都使用相同的编码,否则最终会出现无法使用的文件。
答案 1 :(得分:0)
您可以使用ReadAllText方法吗?它将整个文件存储在一个字符串中。 Get-Content将值存储为字符串数组,其中数组值是文件的行。
(Get-ChildItem *.csv) |%{
#Store the name of the file & date
$Name = $_.basename
$FileDate = $_.CreationTime
#Prepends the following to each message: unique Identifer, Hostname, date
([IO.File]::ReadAllText($_.fullname)) -replace "^","AR-LOG|$Name|$FileDate|"
#Replaces the TAB delimeter with a Pipe delimeter
-replace ' ','|' |
#Appends the resulting message in ascii
Out-File -append -FilePath normalized.log -Encoding ascii
答案 2 :(得分:0)
将文件格式从ASCII
更改为UTF8
:
$filename = "c:\docs\demo.csv"
(Get-Content $filename) | Set-Content $filename -Encoding UTF8