我有一个文件,该文件使用应用程序的多个不同API版本 在API的V1中,字符串中始终有开始和结束时间戳记
&startTimestamp=1572580801000&endTimestamp=1572667141000`
因此完整的网址可能看起来像这样(出于安全考虑,省略了一些数据)
curl -k -X GET "https://serverpathandurl/api/v1/path?query=SELECT%%20xxx%%2C%%20%%20count(xxx)%%20FROM%%20xxx%%20group%%20by%%20xxx&startTimestamp=1572580801000&endTimestamp=1572667141000&explain=false" -H "header " -H "header" > File
此文件中有些行没有时间戳。 我每天在同一时间运行此CURL语句文件。 所以我知道,对于开始和结束时间戳记,它始终可以增加固定值86400000
如何循环浏览文件,修改具有新的开始和结束时间戳记递增值的行,并使用相同的名称写入文件? 我认为部分问题是更改字符串值并将其值添加为Intiger,然后重新格式化字符串。
这是一个具有3个条目的文件内容的示例
curl -k -X GET "https://serverpathandurl/api/v1/path?query=SELECT%%20xxx%%2C%%20%%20count(xxx)%%20FROM%%20xxx%%20group%%20by%%20xxx&startTimestamp=1572580801000&endTimestamp=1572667141000&explain=false" -H "header " -H "header" > File
curl -k -X GET "https://example2/api/v1/path?query=SELECT%%20xxx%%2C%%20%%20count(xxx)%%20FROM%%20xxx%%20group%%20by%%20xxx&startTimestamp=1572580801000&endTimestamp=1572667141000&explain=false" -H "header " -H "header" > File
curl -k -X GET "https://serverpathandurl/api/v2/metrics/series/xxx?resolution=INF&from=now-1d%%2Fm&scope=entity(xxx)" -H "headerionfo" -H "headerinfo" > file
答案 0 :(得分:3)
此答案适用于PowerShell。
URL中的时间戳是Unix毫秒。
要通过每天增加一天(86400000)来替换时间戳,可以执行以下操作:
$file = 'D:\urls.txt' # your file goes here
$lines = Get-Content -Path $file
for ($i = 0; $i -lt $lines.Count; $i++) {
if ($lines[$i] -match 'startTimestamp=(\d+)') {
$newTimeStamp = 'startTimestamp={0}' -f ([int64]$matches[1] + 86400000)
$lines[$i] = $lines[$i] -replace $matches[0], $newTimeStamp
}
if ($lines[$i] -match 'endTimestamp=(\d+)') {
$newTimeStamp = 'endTimestamp={0}' -f ([int64]$matches[1] + 86400000)
$lines[$i] = $lines[$i] -replace $matches[0], $newTimeStamp
}
}
$lines | Set-Content -Path $file -Force
如果您希望能够设置自己的开始和结束时间戳记,则可以尝试以下转换方法:
要将Unix MilliSecond时间戳转换为datetime对象:
$utcDate = [DateTimeOffset]::FromUnixTimeMilliseconds(1572667141000).UtcDateTime # gives you the date in UTC
或
$date = [DateTimeOffset]::FromUnixTimeMilliseconds(1572667141000).LocalDateTime # gives you the date in Local time
要将DateTime对象转换为Unix毫秒时间戳:
# example uses the current date
[DateTime]$origin = [DateTime]::new(1970, 1, 1, 0, 0, 0, 0, 'Utc')
[TimeSpan]$diff = (Get-Date).ToUniversalTime() - $origin
$unixTimeStamp = [int64][Math]::Floor($diff.TotalMilliseconds) # in MilliSeconds
在您的示例中,startTimestamp
转换为2019-11-01 04:00:01
,而endTimestamp
转换为2019-11-02 03:59:01
(UTC)
startTimestamp和endTimestamp之间的时差为86340000毫秒(1天减去1分钟)