我有以下功能:
function DivideAndCreateFiles ([string] $file, [string] $ruleName) {
$Suffix = 0
$FullData = Get-Content $file
$MaxIP = 40
while ($FullData.count -gt 0 ){
$NewData = $FullData | Select-Object -First $MaxIP
$FullData = $FullData | Select-Object -Skip $MaxIP
$NewName = "$ruleName$Suffix"
New-Variable -name $NewName -Value $NewData
Get-Variable -name $NewName -ValueOnly | out-file "$NewName.txt"
$Suffix
}
}
這個函式需要一個檔案位置,這個檔案包含數百個ips。然后它迭代檔案并從中創建檔案,每個檔案都包含 40 個 ip,命名為 $rulename$suffix 所以如果 $rulename=blabla
我會得到 blabla_0 、 blabla_1 、 .. 等等,每個都有 40 ips。
我需要轉換此邏輯并將其放入 jenkins 作業中。該檔案位于作業的作業目錄中,名為 ips.txt
suffix = 0
maxIP = 40
ips = readFile('ips.txt')
...
我很高興在這里重新撰寫這個函式,我對 jenkins / groovy 很陌生
提前致謝
uj5u.com熱心網友回復:
您可以使用類似于以下常規代碼的內容輕松實作這一點:
def divideAndCreateFiles(path, rule_name, init_suffix = 0, max_ip = 40){
// read the file and split lines by new line separator
def ips = readFile(path).split("\n").trim()
// divide the IPs into groups according to the maximum ip range
def ip_groups = ips.collate(ips.size().intdiv(max_ip))
// Iterate over all groups and write them to the corresponding file
ip_groups.eachWithIndex { group, index ->
writeFile file : "${rule_name}${init_suffix index}", text: group.join("\n")
}
}
在我看來,因為您已經在 groovy 中撰寫了一個完整的管道,所以在 groovy 中處理所有邏輯更容易,包括這個函式。
uj5u.com熱心網友回復:
這不是關于轉換為 Jenkins 的答案,而是重寫原始 PowerShell 函式,該函式以非常低效的方式拆分檔案。
(不能在評論中這樣做)
這利用了 的-ReadCount引數Get-Content,該引數指定一次通過管道發送多少行內容。
此外,我已重命名該函式以符合動詞-名詞命名建議。
function Split-File ([string]$file, [string]$ruleName, [int]$maxLines = 40) {
$suffix = 0
$path = [System.IO.Path]::GetDirectoryName($file)
Get-Content -Path $file -ReadCount $maxLines | ForEach-Object {
$_ | Set-Content -Path (Join-Path -Path $path -ChildPath ('{0}_{1}.txt' -f $ruleName, $suffix ))
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/358643.html
上一篇:PowerShellSystem.Net.WebClient從不關閉ftp連接
下一篇:無法讀取檔案內容
