PowerShell:如何将列添加到 CSV 文件末尾?
2024-04-07 22:59:42
PowerShell: 将列添加到 CSV 文件末尾
问题
有时需要将一列数据(例如创建日期)添加到 CSV 文件中,但不是在开头,而是在结尾。本文将提供一个 PowerShell 解决方案来解决这个问题。
解决方案
Get-ChildItem . -Recurse -File -Filter *.txt -Exclude merged.csv -PipelineVariable csv |
ForEach-Object FullName | # parameter binding problem otherwise...
Import-Csv |
Select-Object @{Name='Filename';Expression={$csv.Name}},@{Name='Timestamp';Expression={$csv.LastWriteTime.ToString('s')}} |
Export-Csv -Append -Path merged.csv
步骤分解
1. 获取 CSV 文件
Get-ChildItem . -Recurse -File -Filter *.txt -Exclude merged.csv -PipelineVariable csv
这将获取当前目录及其子目录中所有 TXT 文件(排除 merged.csv),并将其存储在 $csv
变量中。
2. 导入 CSV 文件
ForEach-Object FullName | Import-Csv
这会逐个导入 CSV 文件,并将其转换为 CSV 对象。
3. 选择列
Select-Object @{Name='Filename';Expression={$csv.Name}},@{Name='Timestamp';Expression={$csv.LastWriteTime.ToString('s')}}
这会选择 Filename
和 Timestamp
列。Timestamp
列从文件的最后写入时间派生。
4. 导出 CSV 文件
Export-Csv -Append -Path merged.csv
这会将选定的列导出到合并的 CSV 文件(merged.csv
),并追加到现有数据中。
附加说明
- 确保合并的 CSV 文件已关闭,否则导出将失败。
- 创建日期已转换为“s”格式,表示秒。你可以根据需要调整格式。
- 对于大文件,使用 Export-Csv 的
-NoTypeInformation
参数可以提高性能。
常见问题解答
-
如何将列添加到 CSV 文件开头?
相反,使用以下表达式:
@{Name='Timestamp';Expression={$csv.LastWriteTime.ToString('s')}},@{Name='Filename';Expression={$csv.Name}}
。 -
如何将列添加到特定位置?
使用
Insert-Column
cmdlet 指定插入位置。 -
如何获取文件的最后访问时间?
使用
$csv.LastAccessTime.ToString('s')
。 -
如何选择特定文件进行添加?
使用
Where-Object
筛选器,例如Where-Object Name -eq 'myfile.csv'
。 -
我可以使用其他格式导出创建日期吗?
是的,可以使用
ToString()
方法指定格式,例如ToString('MMMM d, yyyy')
。
结论
通过使用 PowerShell 中的管道命令,我们可以轻松地将列添加到 CSV 文件的末尾。这对于各种数据处理场景非常有用,例如日志分析或数据聚合。我们希望本文提供的解决方案能够满足你的需求,并帮助你提高处理 CSV 文件的效率。