powershell - 如何根据文件名从多个 .txt 文件中提取字符串并将它们附加到 Powershell 上的新文件中?
问题描述
所以基本上我有一系列遵循相同命名法的 .txt 文件,例如:
1111210803_3CE_080977851__006908818__21110300013442021110420211105_20211110_120447_35418862_820
1111210933_3CE_006908818__2111040001442021110520211108_20211110_120447_35418860_820
这些所有文件的命名约定总是以日期开头,即111121
. 在这些文件中,您有几行字符串。我有兴趣从每个文件的第一行中提取一个特定的字符串。这是第一行的示例:
123456789012345678901234567890123 I 696969CCHKCTX 12345678901 DA 22758287
特别是,我对696969CCHKCTX
字符串感兴趣。所有文件都会有一些数字,后跟CCHKCTX
值。我想从每个 .txt 文件中提取字符串的696969
一部分696969CCHKCTX
并将它们全部附加到一个新文件中。
如果可能的话,我想对这些字符串求和并添加适当的小数位,因为它们实际上是美元值,即696969
实际代表6969.69
并且该字符串中的最后两个数字始终代表美分金额。此规则适用于所有 .txt 文件。我希望能够将此应用于相同日期的所有文件(即所有以 开头的文件111121
)
我该怎么办?
解决方案
尝试以下组合Get-ChildItem
, Group-Object
, 和ForEach-Object
, 以及-replace
运算符:
Get-ChildItem -File | # get files of interest; add path / filter as needed.
Group-Object { $_.Name.Substring(0, 6) } | # group by shared date prefix
ForEach-Object {
$firstLines = $_.Group | Get-Content -First 1 # get all 1st lines
# Extract the cents amounts and sum them.
$sumCents = 0.0
$firstLines.ForEach({
$sumCents += [double] ($_ -replace '.+\b(\d+)CCHKCTX\b.+', '$1')
})
# Output an object with the date prefix and the sum dollar amount.
[pscustomobject] @{
Date = $_.Name
Sum = $sumCents / 100
}
}
以上将表格格式的表示输出到显示器。>
例如,您可以使用/将其保存到文件中Out-File
,但最好使用结构化文本格式以供以后处理,例如Export-Csv
.
推荐阅读
- continuous-integration - 规则中无法识别 GitLab CI 自定义变量
- ios - WidgetKit:.timer 文本样式将其扩展以填充宽度,而不是占用空间以适应包含的字符串
- python - 使用 Slugify 时没有反向匹配
- rust - 默认情况下,Rust 闭包是堆栈分配的还是堆分配的?
- css - 图标无法居中
- python - Python OpenCV`ZeroDivisionError:在循环中浮点除以零
- node.js - NodeJS cookie expiration despite resave
- raku - 为什么调用 Raku 的不同方式会导致不同的启动时间?
- aws-lambda - 项目中缺少密钥 id [serverless framework + lambda + dynamodb]
- python - 是否有一种方法可以沿给定数组的轴获取所有成对差异?