我正在尝试获取 CSV(制表符分隔的 txt 文件),并将其中一列从“姓氏、名字”更改为“名字姓氏”。我想我已经差不多可以将其转换为另一个程序的正确格式了,但是我导出的文件只有一列,即具有我编辑的名称的列。
`Import-CSV -Path import.txt -Delimiter "`t" -Header @("col0", "col1", "col2", "col3", "col4", "col5", "col6", "col7", "col8", "col9", "cal1", "cal2", "cal3", "cal4", "cal5") |
foreach{
$last,$first = $_.col3 -split ", "
new-object psobject -Property @{name = "$first $last"}
$_
} |
Export-CSV done.txt -Delimiter "`t" -NoTypeInformation
(Get-Content -Path done.txt ).Replace('"','') | Select-Object -Skip 1 |
Set-Content -Path done.txt
(gc done.txt) | ? {$_.trim() -ne "" } | set-content done.txt`
我尝试导出到 txt 或 csv。最后两行更多的是格式,但我尝试排除它们。也没有标题。所以我添加了它们并在最后将它们取下。如果不添加 new-object,它根本不起作用。谢谢!
直接修改每个输入对象的
.col3
属性 - 无需 New-Object
。
ConvertTo-Csv
代替 Export-Csv
在内存中生成 CSV (TSV) 数据,作为行流,这允许您通过 Select-Object
跳过标题行-Skip 1
,然后使用 Set-Content
将剩余行写入输出文件。
Import-CSV -Path import.txt -Delimiter "`t" -Header col0, col1, col2, col3, col4, col5, col6, col7, col8, col9, cal1, cal2, cal3, cal4, cal5 |
ForEach-Object{
$last, $first = $_.col3 -split ", "
$_.col3 = "$first $last"
$_
} |
ConvertTo-Csv -Delimiter "`t" -NoTypeInformation |
Select-Object -Skip 1 |
Set-Content -Encoding utf8 done.txt
注:
我已将
-Encoding utf8
添加到 Set-Content
调用中,以提醒您可能希望显式控制字符编码;鉴于 Set-Content
默认使用系统的活动旧版 ANSI 代码页;请注意,-Encoding utf8
在 Windows PowerShell 中总是生成带有 BOM 的 UTF-8 文件。
Windows PowerShell 中,您无法控制输出 CSV (TSV) 数据中的字段是否用双引号引起来 - 它们全部都是,但对于行为良好的 CSV / TSV 阅读器来说,应该这样做没有什么区别。
在中: 您
doConvertTo-Csv
和Export-Csv
参数控制
-UseQuotes
和
-QuoteFields
的引用行为。
此外,这两个 cmdlet 现在支持
-NoHeader
-NoTypeInformation
。
此外,(无 BOM)UTF-8 现在是一致
# PS 7+ only
Import-CSV -Path import.txt -Delimiter "`t" -Header col0, col1, col2, col3, col4, col5, col6, col7, col8, col9, cal1, cal2, cal3, cal4, cal5 |
ForEach-Object{
$last, $first = $_.col3 -split ", "
$_.col3 = "$first $last"
$_
} |
Export-Csv done.txt -Delimiter "`t" -UseQuotes Never -NoHeader
如果有示例源和示例目标字符串,我会很高兴,但我想你需要这样的东西
Get-Content -Path import.txt | foreach {
$tmp = $_ -split "\t";
$tmp[3] = $tmp[3] -replace "^([^,]*), ?(.*)",'$2 $1';
$tmp -join "`t"
} | Set-Content -Path import.txt
它逐行读取文本文件。 按选项卡拆分列。 通过采用逗号之前的第一部分来更改第四列,并且(后面可能跟一个空格)采用以下字符作为第二部分。第二部分现在成为第一部分,后面是空格和第一部分。 现在所有列都通过选项卡重新连接在一起。