查找时间戳超过给定持续时间的相邻 CSV 行
Find adjacent CSV rows whose timestamps exceed a given duration
我有一个包含以下内容的文件:
"BatchID","BatchName","JobName","ScannerID","DateCreated","DailyCounter"
"12713","9001","fst100","09 ","2/6/2020 6:21:06 AM","1"
"12714","9002","fst100","09 ","2/6/2020 6:21:42 AM","2"
"12715","9003","fst100","09 ","2/6/2020 6:21:58 AM","3"
"12716","9004","fst100","09 ","2/6/2020 6:22:13 AM","4"
"12717","9005","fst100","09 ","2/6/2020 6:22:30 AM","5"
"12718","9006","fst100","09 ","2/6/2020 6:24:54 AM","6"
"12719","9007","fst100","09 ","2/6/2020 6:25:12 AM","7"
"12720","9008","fst100","09 ","2/6/2020 6:55:11 AM","8"
"12721","9009","fst100","09 ","2/6/2020 6:55:27 AM","9"
我想比较日期创建字段并将相隔 15 分钟或更长时间的行写入文件。
开始于:
您的时间戳字符串采用的格式在您将它们转换为 [datetime]
(System.DateTime
) 时可以按原样识别(除非您的格式列出了 天而不是月份),
你可以直接减去两个[datetime]
实例得到一个[timespan]
实例(System.TimeSpan
),你可以.TotalMinutes
属性查询
解决方案相当简单:
$prevRow = $null
Import-Csv in.csv | ForEach-Object { # Parse the CSV rows into objects and process each
if ($prevRow -and ([datetime] $_.DateCreated - [datetime] $prevRow.DateCreated).TotalMinutes -gt 15) {
# Output the previous row and the current row.
$prevRow; $_
}
$prevRow = $_
} # | Export-Csv -NoTypeInformation -Encoding Utf8 out.csv
以上将匹配的行打印到屏幕;删除 #
以导出到(不同的)CSV 文件。
注意:如所写,您最终可能会在输出中得到 重复 行,即如果在相邻行 A B C 中 A 和 B 以及 B 和 C 都超过 15 分钟分开,此时输出 A B B C。
文档链接:
我有一个包含以下内容的文件:
"BatchID","BatchName","JobName","ScannerID","DateCreated","DailyCounter"
"12713","9001","fst100","09 ","2/6/2020 6:21:06 AM","1"
"12714","9002","fst100","09 ","2/6/2020 6:21:42 AM","2"
"12715","9003","fst100","09 ","2/6/2020 6:21:58 AM","3"
"12716","9004","fst100","09 ","2/6/2020 6:22:13 AM","4"
"12717","9005","fst100","09 ","2/6/2020 6:22:30 AM","5"
"12718","9006","fst100","09 ","2/6/2020 6:24:54 AM","6"
"12719","9007","fst100","09 ","2/6/2020 6:25:12 AM","7"
"12720","9008","fst100","09 ","2/6/2020 6:55:11 AM","8"
"12721","9009","fst100","09 ","2/6/2020 6:55:27 AM","9"
我想比较日期创建字段并将相隔 15 分钟或更长时间的行写入文件。
开始于:
您的时间戳字符串采用的格式在您将它们转换为
[datetime]
(System.DateTime
) 时可以按原样识别(除非您的格式列出了 天而不是月份),你可以直接减去两个
[datetime]
实例得到一个[timespan]
实例(System.TimeSpan
),你可以.TotalMinutes
属性查询
解决方案相当简单:
$prevRow = $null
Import-Csv in.csv | ForEach-Object { # Parse the CSV rows into objects and process each
if ($prevRow -and ([datetime] $_.DateCreated - [datetime] $prevRow.DateCreated).TotalMinutes -gt 15) {
# Output the previous row and the current row.
$prevRow; $_
}
$prevRow = $_
} # | Export-Csv -NoTypeInformation -Encoding Utf8 out.csv
以上将匹配的行打印到屏幕;删除 #
以导出到(不同的)CSV 文件。
注意:如所写,您最终可能会在输出中得到 重复 行,即如果在相邻行 A B C 中 A 和 B 以及 B 和 C 都超过 15 分钟分开,此时输出 A B B C。
文档链接: