使用PowerShell,如何将文件创建/拆分为1周的块?
这是关于这里的帖子: 使用下面的代码(由“mjolinor”提供),我可以获取一个单片(管道“|”分隔)CSV文件,并创建一个仅包含日期小于使用PowerShell,如何将文件创建/拆分为1周的块?,powershell,Powershell,这是关于这里的帖子: 使用下面的代码(由“mjolinor”提供),我可以获取一个单片(管道“|”分隔)CSV文件,并创建一个仅包含日期小于$date的行的修剪CSV文件: $date = '09/29/2011' foreach ($file in gci *.csv) { (gc $file) | ? {[datetime]$_.split('|')[1] -lt $date } | set-content $file } 上面的代码非常有效!我现在需要做的是
$date
的行的修剪CSV文件:
$date = '09/29/2011'
foreach ($file in gci *.csv) {
(gc $file) |
? {[datetime]$_.split('|')[1] -lt $date
} | set-content $file
}
上面的代码非常有效!我现在需要做的是从单一CSV文件中创建额外的CSV文件,其中的行包含日期=$date
,并且每个文件需要从$date
开始的1周内的块
例如,我需要以下“修剪”的CSV文件(所有文件都是从原始CSV创建的):
- 2011年9月30日之前的所有日期(已使用上述代码完成)
- 日期范围为09/30-10/6的文件
- 日期范围为10/7-10/14的文件
- 等等,等等,直到我到达最近的日期
- 您可以使用这样的方法
$date = (Get-Date)
$di = [Globalization.DateTimeFormatInfo]::CurrentInfo
$week = $di.Calendar.GetWeekOfYear($date, $di.CalendarWeekRule, $di.FirstDayOfWeek)
确定给定日期的周数。您可以使用以下方法
$date = (Get-Date)
$di = [Globalization.DateTimeFormatInfo]::CurrentInfo
$week = $di.Calendar.GetWeekOfYear($date, $di.CalendarWeekRule, $di.FirstDayOfWeek)
确定给定日期的周数。这不是用您的输入测试的(它是根据我用于时间切片和计算Windows日志事件的某些脚本改编的),但应该可以正常工作。它可以在您以$span指定的任意时间跨度上创建文件:
$StartString = '09/29/2011'
$inputfile = 'c:\somedir\somefile.csv'
$Span = new-timespan -days 7
$lines = @{}
$TimeBase = [DateTime]::MinValue
$StartTicks = ([datetime]$startString).Ticks
$SpanTicks = $Span.Ticks
get-content $inputfile |
foreach {
$dt = [datetime]$_.split('|')[1]
$Time_Slice = [int][math]::truncate(($dt.Ticks - $StartTicks) / $SpanTicks)
$lines[$Time_Slice] += @($_)
}
$lines.GetEnumerator() |
foreach {
$filename = ([datetime]$StartString + [TimeSpan]::FromTicks($SpanTicks * $_.Name)).tostring("yyyyMMdd") + '.csv'
$_.value | export -csv $filename
}
这并没有用您的输入进行测试(它是根据我用于时间切片和计算Windows日志事件的一些脚本改编的),但应该可以正常工作。它可以在您以$span指定的任意时间跨度上创建文件:
$StartString = '09/29/2011'
$inputfile = 'c:\somedir\somefile.csv'
$Span = new-timespan -days 7
$lines = @{}
$TimeBase = [DateTime]::MinValue
$StartTicks = ([datetime]$startString).Ticks
$SpanTicks = $Span.Ticks
get-content $inputfile |
foreach {
$dt = [datetime]$_.split('|')[1]
$Time_Slice = [int][math]::truncate(($dt.Ticks - $StartTicks) / $SpanTicks)
$lines[$Time_Slice] += @($_)
}
$lines.GetEnumerator() |
foreach {
$filename = ([datetime]$StartString + [TimeSpan]::FromTicks($SpanTicks * $_.Name)).tostring("yyyyMMdd") + '.csv'
$_.value | export -csv $filename
}
乔利纳——谢谢你!我会玩弄你的代码,看看能不能让它为我工作。mjolinor--谢谢!我会玩弄你的代码,看看能不能让它为我工作。