我一直在 Excel 中手动处理大量文件。我已经进行了一些搜索,但还没有找到关于如何以自动化方式实现此过程的明确最佳实践。
我的手动流程如下:
我有一个 .tab(制表符分隔)文件。每行总共有 8 个“列”。我需要对每行最后 5 列的数值求负。
我一直在做什么
- 在 Excel 中打开文件
- 在任意空白单元格中键入 -1。复制它
- Highlight the data in the last 5 columns → right-click → Paste Special → Multiply → Enter
- 然后保存文件。
我不确定最好的方法是 PowerShell 还是替代脚本,因此我想联系社区,看看其他人对此有何建议。感谢您的时间。
在 PowerShell 中您可以使用Import-Csv https://technet.microsoft.com/en-us/library/hh849891.aspx用于阅读和Export-Csv https://technet.microsoft.com/en-us/library/hh849932.aspx用于写入字符分隔的文件。两个 cmdlet 都提供一个参数-Delimiter
允许您指定分隔符:
$csv = Import-Csv 'C:\path\to\input.csv' -Delimiter "`t"
$csv | Export-Csv 'C:\path\to\output.csv' -Delimiter "`t" -NoType
通过导入 CSVImport-Csv
为您提供自定义对象的列表,其中 CSV 中的每个字段都表示为对象的属性。在将数据写回文件之前,您可以通过修改属性值来修改字段。为此,您可以采用以下两种方法之一:
-
将 CSV 完全读入变量,循环更新要修改的字段,然后将数据导出回文件:
$csv = Import-Csv ...
foreach ($row in $csv) {
[int]$row.B *= -1
[int]$row.F *= -1
}
$csv | Export-Csv ...
-
将 CSV 读入管道并替换您想要修改的字段计算属性 https://technet.microsoft.com/en-us/library/ff730948.aspx:
Import-Csv ... |
Select-Object -Include *,@{n='B';e={-$_.B}},@{n='F';e={-$_.F}} -Exclude B,F |
Export-Csv ...
请注意,要使其工作,您必须使用单独的输入和输出文件,或者将Import-Csv
括号内的声明。否则Export-Csv
会失败,因为它无法写入 CSVImport-Csv
仍在从中阅读。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)