您如何将此BASH脚本复制到PowerShell中?它采用一个基本的字符串并抓住这些特定的块并在其间放置一个管道并将其写入csv文件。我知道怎么做get-content和输出到csv但是在powershell中删除字符串的最佳方法是什么?
22.05.2015 11:21 60 30329877_ASCII.txt
22.05.2015 14:07 122 30329877_UTF16.txt
22.05.2015 14:07 122 30329877_Good.txt
22.05.2015 14:07 128 30329877_Wrong.txt
4 File(s) 432 bytes
==>
我之前使用过split()但似乎不是正确的方法。我正在考虑循环遍历每一行并保存该行的每一行并保存到新的字符串var并为每个部分添加分隔符。这看起来非常低效。
思想?
源文件由具有大量空格的字符位置构成。每个字段都有一定数量的字符空间。 (它基本上是一个数据库文件,但采用非常简单的txt格式)
`cat /app/$filename |cut -c1-9,19-138,139-198,199-238,239-240,241-245,287-296 --output-delimiter="|" >> /app/CSVs/$filename.csv`
我认为使用$ string.substring(char#,length)将适用于循环,但越多越好。
输出应该看起来像
1-9 = ID (9 chars long)
19-138 = business_name (120 chars long)
139-198 = address (60 chars long)
198-237 = city (40 chars long)
238-239 = state (2 chars long)
240-244 = zip_code (5 chars long)
286-295 = phone (10 chars long)
答案 0 :(得分:0)
看起来像新PS 5 cmdlet ConvertFrom-String
的作业:
不幸的是,我还没有尝试过,所以我无法提供一个例子。但它也可以使用正则表达式完成:
Get-Content -Path '.\db.txt' |
ForEach-Object{$_ -replace '^(.{9})(.{120})(.{60})(.{40})(.{2})(.{5})(.{10})$', '$1|$2|$3|$4|$5|$6|$7'} |
Set-Content -Path '.\db.csv'
Get-Content
\ Set-Content
为quite slow,因此为了加快处理速度,您可以切换到StreamReader \ StreamWriter。请参阅我对这个问题的回答:More-efficient way to modify a CSV file's content,我在脚本中使用它们来加快速度。
答案 1 :(得分:0)
$subChar =0,18,138,198,238,240,286
$subLength =9,120,60,40,2,5,10
$file = Get-content 'C:\Users\jwannemacher\Desktop\out.txt'
Foreach($line in $file)
{
$lineCounter
$array = @()
$lineLoop = 0
$charLoop = 0
foreach($sub in $subChar)
{
$word = $line.Substring($subChar[$charLoop],$subLength[$charLoop])
$array += $word
$charLoop++
}
$array -join '|' | Out-File C:\file1.csv -Append