如何按文件名筛选TXT文件提取指定字符串、转换金额并汇总到新文件
实现方案
以下两种实现均默认提取每个文件首行第一个符合「数字+CCHKCTX」规则的字段,若需要提取同一行所有符合规则的字段,可自行修改正则匹配部分的逻辑,遍历所有匹配结果即可。
Shell 实现(适配Linux、macOS、WSL环境)
无需额外安装依赖,直接使用系统内置的bash、grep、awk工具即可完成:
#!/bin/bash # 可修改的配置参数 TARGET_DATE="111121" # 替换为你需要的日期前缀 RESULT_FILE="amount_summary.txt" total=0 raw_values=() # 遍历所有符合命名规则的txt文件 for file in ${TARGET_DATE}*.txt; do # 无匹配文件时跳过报错 [ -f "$file" ] || continue # 提取首行CCHKCTX前的数字 raw_num=$(head -n1 "$file" | grep -oE '[0-9]+(?=CCHKCTX)' | head -n1) if [ -n "$raw_num" ]; then raw_values+=("$raw_num") # 用awk处理浮点数计算避免bash整数限制 total=$(awk -v tot="$total" -v num="$raw_num" 'BEGIN{print tot + num / 100}') fi done # 追加结果到输出文件 { echo "===== 统计日期: $TARGET_DATE =====" echo "原始提取值列表:" for val in "${raw_values[@]}"; do echo "- $val" done echo "总金额(美元): $total" echo "----------------------------------" } >> "$RESULT_FILE" echo "统计完成,结果已追加到 $RESULT_FILE"
使用时直接修改TARGET_DATE为你需要的日期前缀即可,结果会自动追加到指定文件,不会覆盖历史内容。
PowerShell 实现(适配Windows原生环境)
兼容Windows自带的PowerShell 5.1及以上版本:
# 可修改的配置参数 $targetDate = "111121" # 替换为你需要的日期前缀 $resultFile = "amount_summary.txt" $rawValues = @() $total = 0.0 # 遍历匹配命名规则的文件 Get-ChildItem -Filter "${targetDate}*.txt" -File | ForEach-Object { # 仅读取文件首行 $firstLine = Get-Content $_.FullName -TotalCount 1 # 匹配规则字段 if ($firstLine -match '(\d+)CCHKCTX') { $rawNum = $matches[1] $rawValues += $rawNum $total += [decimal]$rawNum / 100 } } # 追加写入结果,默认使用UTF8编码 $output = @" ===== 统计日期: $targetDate ===== 原始提取值列表: $($rawValues | ForEach-Object { "- $_" } | Out-String) 总金额(美元): $total ---------------------------------- "@ Add-Content -Path $resultFile -Value $output -Encoding UTF8 Write-Host "统计完成,结果已追加到 $resultFile"
内容的提问来源于stack exchange,提问作者AD1204
相关产品推荐
相关产品推荐

