循环浏览文本文件,并从文本文件中提取一组100个IP,然后输出到单独的文本文件

时间:2019-03-27 22:27:35

标签: regex powershell powershell-v2.0 regex-greedy

我有一个文本文件,其中包含大约900个IP。我需要从该文件创建100个IP批次,并将它们输出到新文件中。那将创建大约9个文本文件。

我们的API仅允许一次发布100个IP。

你能帮我吗?

下面是文本文件的格式  10.86.50.55,10.190.206.20,10.190.49.31,10.190.50.117,10.86.50.57,10.190.49.216,10.190.50.120,10.190.200.27,10.86.50.58,10.86.50.94,10.190.38.181,10.190.50.119,10.86。 50.53,10.190.50.167,10.190.49.30,10.190.49.89,10.190.50.115,10.86.50.54,10.86.50.56,10.86.50.59,10.190.50.210,10.190.49.20,10.190.50.172,10.190.49.21,10.86.49.18, 10.190.50.173,10.86.49.49,10.190.50.171,10.190.50.174,10.86.49.63,10.190.50.175,10.13.12.200,10.190.49.27,10.190.49.19,10.86.49.29,10.13.12.201,10.86.49.28.28,10.190 49.62,10.86.50.147,10.86.49.24,10.86.50.146,10.190.50.182,10.190.50.25,10.190.38.252,10.190.50.57,10.190.50.54,10.86.50.78,10.190.50.23,10.190.49.8,10.86.50.80, 10.190.50.53,10.190.49.229,10.190.50.58,10.190.50.130,10.190.50.22,10.86.52.22,10.19.68.61,10.41.43.130,10.190.50.56,10.190.50.123,10.190.49.55,10.190.49.66,10.190。 49.68,10.190.50.86,10.86.49.113,10.86.49.114,10.86.49.101,10.190.50.150,10.190.49.184,10.190.50.152,10.190.50.151,10.86.49.43,10.190.192.25,10.190.192.23,10.190.49.115 10.86.49.44,10.190 .38.149,10.190.38.151,10.190.38.150,10.190.38.152,10.190.38.145,10.190.38.141,10.190.38.148,10.190.38.142,10.190.38.144,10.190.38.147,10.190.38.143,10.190.38.146,10.190.38.146。 ,10.190.38.251,10.190.49.105,10.190.49.110,10.190.49.137,10.190.49.242,10.190.50.221,10.86.50.72,10.86.49.16,10.86.49.15,10.190.49.112,10.86.49.32,10.86.49.11,10。 .49.150,10.190.49.159,10.190.49.206,10.86.52.28,10.190.49.151,10.190.49.207,10.86.49.19,10.190.38.103,10.190.38.101,10.190.38.116,10.190.38.120,10.190.38.102,10.190.38。 ,10.190.38.140,10.190.198.50,10.190.38.109,10.190.38.108,10.190.38.111,10.190.38.112,10.190.38.113,10.190.38.114,10.190.49.152,10.190.50.43,10.86.49.23,10.86.49.205 .49.220,10.190.50.230,10.190.192.238,10.190.192.237,10.190.192.239,10.190.50.7,10.190.50.10,10.86.50.86,10.190.38.125,10.190.38.127,10.190.38.126,10.190.50.227,10.190.50 ,10.86.49.59,10.190.49.158,10.190.49.157,10.190.44.11,10.190.38.124,10.190.50.153,10.190.49.40,10.190.192.235,10.190.192.236,10.190.50.241,10.190。 50.240,10.86.46.8,10.190.38.234,10.190.38.233,10.86.50.163,10.86.50.180,10.86.50.164,10.190.49.245,10.190.49.244,10.190.192.244,10.190.38.130,10.86.49.142,10.86.49.102, 10.86.49.141,10.86.49.67,10.190.50.206,10.190.192.243,10.190.192.241

我试图在网上寻找一些有效的代码,但无法真正想到在这种情况下最有效的方法

$IP = 'H:\IP.txt'
$re = '\d*.\d*.\d*.\d*,'

Select-String -Path $IP -Pattern $re -AllMatches |
    Select-Object -Expand Matches |
    ForEach-Object {
        $Out = 'C:\path\to\out.txt' -f | Set-Content $clientlog
    }

3 个答案:

答案 0 :(得分:0)

这会做你想做的

$bulkIP = (get-content H:\IP.txt) -split ','
$i = 0

# Created loop
Do{
    # Completed an action every 100 counts (including 0)
    If(0 -eq $i % 100) {
        # If the array is a valid entry. Removing this will usually end up creating an empty junk file called -1 or something
        If($bulkIP[$i]) {
            # outputs 100 lines into a folder with the starting index as the name.
            # Eg. The first 1-100, the file would be called 1.txt. 501-600 would be called 501.txt etc
            $bulkIP[$($i)..$($i+99)] | Out-File "C:\path\to\$($bulkip.IndexOf($bulkip[$($i)+1])).txt"
        }
    }
    $i++
}While($i -le 1000)

答案 1 :(得分:0)

这是什么...

  • 计算批次数
  • 计算每个批次的开始和结束索引
  • 根据以上内容创建一个范围
  • 创建一个PSCustomObject来容纳每个批次
  • 从范围创建数组切片
  • 将其发送到$ Var集合
  • 显示集合中的内容以及该集合中的第一个批次

这是代码...

# fake reading in a raw text file
#    in real life, use Get-Content -Raw
$InStuff = @'
10.86.50.55,10.190.206.20,10.190.49.31,10.190.50.117,10.86.50.57,10.190.49.216,10.190.50.120,10.190.200.27,10.86.50.58,10.86.50.94,10.190.38.181,10.190.50.119,10.86.50.53,10.190.50.167,10.190.49.30,10.190.49.89,10.190.50.115,10.86.50.54,10.86.50.56,10.86.50.59,10.190.50.210,10.190.49.20,10.190.50.172,10.190.49.21,10.86.49.18,10.190.50.173,10.86.49.49,10.190.50.171,10.190.50.174,10.86.49.63,10.190.50.175,10.13.12.200,10.190.49.27,10.190.49.19,10.86.49.29,10.13.12.201,10.86.49.28,10.190.49.62,10.86.50.147,10.86.49.24,10.86.50.146,10.190.50.182,10.190.50.25,10.190.38.252,10.190.50.57,10.190.50.54,10.86.50.78,10.190.50.23,10.190.49.8,10.86.50.80,10.190.50.53,10.190.49.229,10.190.50.58,10.190.50.130,10.190.50.22,10.86.52.22,10.19.68.61,10.41.43.130,10.190.50.56,10.190.50.123,10.190.49.55,10.190.49.66,10.190.49.68,10.190.50.86,10.86.49.113,10.86.49.114,10.86.49.101,10.190.50.150,10.190.49.184,10.190.50.152,10.190.50.151,10.86.49.43,10.190.192.25,10.190.192.23,10.190.49.115,10.86.49.44,10.190.38.149,10.190.38.151,10.190.38.150,10.190.38.152,10.190.38.145,10.190.38.141,10.190.38.148,10.190.38.142,10.190.38.144,10.190.38.147,10.190.38.143,10.190.38.146,10.190.192.26,10.190.38.251,10.190.49.105,10.190.49.110,10.190.49.137,10.190.49.242,10.190.50.221,10.86.50.72,10.86.49.16,10.86.49.15,10.190.49.112,10.86.49.32,10.86.49.11,10.190.49.150,10.190.49.159,10.190.49.206,10.86.52.28,10.190.49.151,10.190.49.207,10.86.49.19,10.190.38.103,10.190.38.101,10.190.38.116,10.190.38.120,10.190.38.102,10.190.38.123,10.190.38.140,10.190.198.50,10.190.38.109,10.190.38.108,10.190.38.111,10.190.38.112,10.190.38.113,10.190.38.114,10.190.49.152,10.190.50.43,10.86.49.23,10.86.49.205,10.86.49.220,10.190.50.230,10.190.192.238,10.190.192.237,10.190.192.239,10.190.50.7,10.190.50.10,10.86.50.86,10.190.38.125,10.190.38.127,10.190.38.126,10.190.50.227,10.190.50.149,10.86.49.59,10.190.49.158,10.190.49.157,10.190.44.11,10.190.38.124,10.190.50.153,10.190.49.40,10.190.192.235,10.190.192.236,10.190.50.241,10.190.50.240,10.86.46.8,10.190.38.234,10.190.38.233,10.86.50.163,10.86.50.180,10.86.50.164,10.190.49.245,10.190.49.244,10.190.192.244,10.190.38.130,10.86.49.142,10.86.49.102,10.86.49.141,10.86.49.67,10.190.50.206,10.190.192.243,10.190.192.241
'@

$SplitInStuff = $InStuff.Split(',')

$BatchSize = 25
$BatchCount = [math]::Truncate($SplitInStuff.Count / $BatchSize) + 1
$Start = $End = 0
$Result = foreach ($BC_Item in 1..$BatchCount)
    {
    $Start = $End
    if  ($BC_Item -eq 1)
        {
        $End = $Start + $BatchSize - 1
        }
        else
        {
        $End = $Start + $BatchSize
        }
    $Range = $Start..$End

    [PSCustomObject]@{
        IP_List = $SplitInStuff[$Range]
        }
    }

$Result
'=' * 20
$Result[0]
'=' * 20
$Result[0].IP_List.Count
'=' * 20
$Result[0].IP_List

屏幕输出...

IP_List                                                      
-------                                                      
{10.86.50.55, 10.190.206.20, 10.190.49.31, 10.190.50.117...} 
{10.86.49.18, 10.190.50.173, 10.86.49.49, 10.190.50.171...}  
{10.86.50.80, 10.190.50.53, 10.190.49.229, 10.190.50.58...}  
{10.190.49.115, 10.86.49.44, 10.190.38.149, 10.190.38.151...}
{10.86.49.32, 10.86.49.11, 10.190.49.150, 10.190.49.159...}  
{10.86.49.23, 10.86.49.205, 10.86.49.220, 10.190.50.230...}  
{10.190.50.240, 10.86.46.8, 10.190.38.234, 10.190.38.233...} 
====================
{10.86.50.55, 10.190.206.20, 10.190.49.31, 10.190.50.117...} 
====================
25
====================
10.86.50.55
10.190.206.20
10.190.49.31
10.190.50.117
10.86.50.57
10.190.49.216
10.190.50.120
10.190.200.27
10.86.50.58
10.86.50.94
10.190.38.181
10.190.50.119
10.86.50.53
10.190.50.167
10.190.49.30
10.190.49.89
10.190.50.115
10.86.50.54
10.86.50.56
10.86.50.59
10.190.50.210
10.190.49.20
10.190.50.172
10.190.49.21
10.86.49.18

答案 2 :(得分:0)

尝试

$cpt=0
$Rang=1

#remove old file
Get-ChildItem "H:\FileIP_*.txt" -file | Remove-Item -Force

(Get-Content "H:\IP.txt") -split ',' | %{

if (!($cpt++ % 100)) {$FileResult="H:\FileIP_{0:D3}.txt" -f $Rang++}  # build filename if cpt divisile by 100

$_ | Out-File $FileResult -Append
}