powershell - PowerShell 删除或跳过 CSV 中的列
问题描述
首先:我是 PowerShell 新手。我几乎没有使用 PowerShell 修改或更改 CSV 文件的经验。
我们的系统给出了一种不常见的 CSV 格式,如下所示:
Example1;Example2;Name;Lastname;ContentOfExample1;ContentOfExample2;John;Doe
标题位于信息前面的每一行。我想摆脱一些列,例如 Example1 和 Example2。
作为第二步,我需要分配一个新的标题
-Header Name,Lastname,Adress,Phone,..
等等。
我很感谢任何提示:-)
解决方案
根据定义,这种模式会导致偶数个“;” 分隔元素。您可以利用它来发挥自己的优势,通过算术将属性分配给对象,然后将它们重新发送到新的 CSV 文件。
可能看起来像:
Get-Content C:\Temp\InitialCSVFile.csv |
ForEach-Object{
$TempArr = $_.Split( ';' )
$TempHash = [Ordered]@{}
For($i = 0; $i -lt ($TempArr.Count / 2); ++$i)
{
$TempHash[ $TempArr[ $i ] ] = $TempArr[ $i+4 ]
}
[PSCustomObject]$TempHash
} |
Export-CSV -path C:\Temp\TestCSV.csv -NoTypeInformation -Append -Delimiter ';'
该代码将文件内容作为纯字符串读取,而不是像 CSV 这样的半结构化格式。由于每一行都通过管道传输到ForEach-Object
字符串.Split()
方法,因此正在创建一个数组($_ -split ';'
也可以)。我们实例化一个 Hash/Dictionary 对象来保存一些键值对。完成后,将使用传统的 For 循环来引用 kay 名称和值。名称是元素 0,因此它的值应该是 0+4。注意:循环被编码为在数组的中点处停止。这就是为什么我之前提到的偶数个元素很重要!
哈希表完成后,代码将其转换为 a[PSCustomObject]
并将其发送到管道Export-CSV
,当然该管道处理对象。这应该会生成一个类似于以下内容的新 CSV 文件:
Example1 Example2 Name Lastname
-------- -------- ---- --------
ContentOfExample1 ContentOfExample2 John Doe
ContentOfExample1 ContentOfExample2 John Doe
注意:显然数据是多余的,因为我只是在输入文件中重复了您的示例。这不应该是您的实时数据的问题。
注意:可能不需要重复 recreate
$TempHash
,因为我们将在每次循环内部迭代中重新分配每个键的值。现在,我将让这个示例保持原样。
更新:排除属性:
$ExcludeProperties = @( 'Example1', 'Example2' )
Get-Content C:\Temp\InitialCSVFile.csv |
ForEach-Object{
$TempArr = $_.Split( ';' )
$TempHash = [Ordered]@{}
For($i = 0; $i -lt ($TempArr.Count / 2); ++$i)
{
$TempHash[ $TempArr[ $i ] ] = $TempArr[ $i+4 ]
}
[PSCustomObject]$TempHash
} |
Select-Object -Property * -ExcludeProperty $ExcludeProperties |
Export-CSV -path C:\Temp\TestCSV.csv -NoTypeInformation -Append -Delimiter ';'
推荐阅读
- angular - 刷新HTML组件Angular 6
- reactjs - 我创建了一个反应项目并进行了路由。在路由中,我正在努力解决语法错误
- typescript - 知道为什么 sinon 不生成 xml 响应对象吗?
- json - 使用 elasticsearch 查询完整的 JSON 对象
- java - 无法建立新的drools规则,错误:规则编译错误:!!!超过 65535 字节限制
- mysql - 使用分组表获取前 n 条记录
- python - 关于 Python Pandas,删除行
- powerbi - 根据排序删除重复项
- hyperledger-fabric - 使用 couchdb(CouchDBKeyValueStore) 的 Hyperledger Fabric 客户端凭证存储
- asp.net-core - ASP.NET Core 3.0 处理控制器和服务