You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerShell将CSV的Days列拆分至对应星期列的需求

PowerShell处理CSV星期时间拆分方案

问题描述

需要将第三方工具导出的空格分隔类CSV数据中的Days字段拆分,按星期(Mon-Sun)分配到独立列,无论原始数据中星期的顺序如何。

解决脚本

# 定义固定顺序的星期列表
$weekDays = 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'

# 读取输入文件,跳过表头后拆分每一行的FQDN和Days
$devices = Get-Content -Path '.\input.txt' | Select-Object -Skip 1 | ForEach-Object {
    $parts = $_ -split '\s{2,}', 2
    [PSCustomObject]@{
        FQDN = $parts[0].Trim()
        Days = $parts[1].TrimEnd('; ')
    }
}

# 处理每个设备的时间数据,生成目标格式对象
$output = $devices | ForEach-Object {
    $device = $_
    # 初始化所有星期的时间为空字符串
    $dayTimes = @{}
    $weekDays | ForEach-Object { $dayTimes[$_] = '' }

    # 拆分每个星期的时间条目
    $dayEntries = $device.Days -split ';\s*'
    foreach ($entry in $dayEntries) {
        if (-not $entry) { continue }
        
        # 匹配标准格式:星期 + 时间
        if ($entry -match '^(Mon|Tue|Wed|Thu|Fri|Sat|Sun)\s+(.*)$') {
            $day = $matches[1]
            $times = $matches[2].Trim()
            $dayTimes[$day] = $times
        }
        # 处理异常格式(如"Sat Fri 00:00-08:45"),提取正确星期和时间
        elseif ($entry -match '(Sat|Sun)\s+(Fri)\s+(.*)$') {
            $targetDay = $matches[1]
            $times = $matches[3].Trim()
            $dayTimes[$targetDay] = $times
        }
    }

    # 构建包含所有星期列的输出对象
    $outputProps = @{ FQDN = $device.FQDN }
    foreach ($day in $weekDays) {
        $outputProps[$day] = $dayTimes[$day]
    }
    [PSCustomObject]$outputProps
}

# 控制台输出对齐结果
$output | Format-Table -AutoSize

# 导出为制表符分隔的文件(避免时间中的逗号干扰)
# $output | Export-Csv -Path '.\output.tsv' -NoTypeInformation -Delimiter "`t"

关键说明

  1. 数据读取:使用正则\s{2,}拆分多个空格分隔的FQDN和Days字段,适配原始数据格式。
  2. 异常处理:针对原始数据中Sat Fri、Sun Fri的错误格式,提取正确星期对应的时间。
  3. 格式修正(可选):如果需要修正00:00-:08:45这类时间格式错误,可在赋值$times后添加:
    $times = $times -replace '-:', '-0'
    
  4. 输出选项:控制台用Format-Table保证对齐;导出文件建议用TSV(制表符分隔),避免时间中的逗号破坏CSV格式。

内容的提问来源于stack exchange,提问作者majan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 07:20:56