测量/计算登录次数和文件传输次数从CSV数据中。

huangapple go评论87阅读模式
英文:

measure/count logins & file transfers from csv data

问题

我有类似以下的数据;

  1. username method ip uri-stem
  2. ABC\bob1 RETR 192.45.00.00 file.txt
  3. - USER 10.00.00.01 bob2
  4. ABC\bob2 STOR 10.00.00.01 file1234.txt
  5. - USER 192.45.00.00 bob1
  6. ABC\bob1 RETR 192.45.00.00 file2.txt

并且我需要它看起来像这样

  1. user Ip loginCount FilesIn FilesOut
  2. bob1 192.45.00.00 5 3 3
  3. bob2 00.00.00.00 3 2 2
英文:

I have data that looks like this;

  1. username method ip uri-stem
  2. ABC\bob1 RETR 192.45.00.00 file.txt
  3. - USER 10.00.00.01 bob2
  4. ABC\bob2 STOR 10.00.00.01 file1234.txt
  5. - USER 192.45.00.00 bob1
  6. ABC\bob1 RETR 192.45.00.00 file2.txt

& I need it to look like this

  1. user Ip loginCount FilesIn FilesOut
  2. bob1 192.45.00.00 5 3 3
  3. bob2 00.00.00.00 3 2 2
  1. #Key
  2. RETR = FilesOut
  3. STOR = FilesIn
  4. USER = loginCount

This is what I have so far for formatting into the first bit of data

  1. $inputFile = ".\u_ex230201.log"
  2. $inputHeaders = "date","time","c-ip","c-port","cs-username","s-sitename","s-computername","cs-host","s-ip","s-port","cs-method","cs-uri-stem","sc-status","sc-win32-status","sc-substatus","sc-bytes","cs-bytes","time-taken","x-session","x-fullpath","x-debug"
  3. $codes = "USER","RETR","STOR"
  4. Import-Csv $inputfile -Header $inputHeaders -Delimiter ' ' |
  5. ForEach-Object {
  6. $code = $_.'cs-method'
  7. if ($codes -contains $code){
  8. [PSCustomObject]@{
  9. username = $_.'cs-username'
  10. method = $_.'cs-method'
  11. ip = $_.'c-ip'
  12. uri-stem = $_.'cs-uri-stem'
  13. Results = [int]$_.Results
  14. }
  15. }
  16. } | export-csv .\export

答案1

得分: 0

以下是您要翻译的内容:

  1. You want a pivot table. Try this
  2. <!-- begin snippet: js hide: false console: true babel: false -->
  3. $csv = @"
  4. username method ip uri-stem
  5. ABC\bob1 RETR 192.45.00.00 file.txt
  6. - USER 10.00.00.01 bob2
  7. ABC\bob2 STOR 10.00.00.01 file1234.txt
  8. - USER 192.45.00.00 bob1
  9. ABC\bob1 RETR 192.45.00.00 file2.txt
  10. "@
  11. #remove spaces at beginning of line
  12. $csv = $csv -replace ".* -","-"
  13. #replace spaces with comma
  14. $csv = $csv -replace " +",","
  15. $table = $csv | ConvertFrom-Csv
  16. foreach($row in $table)
  17. {
  18. $row.username = $row.username -replace "^.*\\",""
  19. if($row.username -eq "-") { $row.username = $row.'uri-stem' }
  20. }
  21. #$table
  22. $groups = $table | Group-Object -Property username
  23. $pivotTable = [System.Collections.ArrayList]::new()
  24. foreach($row in @($groups))
  25. {
  26. $newRow = New-Object -TypeName psobject
  27. $newRow | Add-Member -NotePropertyName user -NotePropertyValue $row.Name
  28. $firstGroup = $row.Group | Select-Object -first 1
  29. $newRow | Add-Member -NotePropertyName IP -NotePropertyValue $firstGroup.IP
  30. $FilesOut = @($row.Group | Where-Object {$_.method -eq "RETR"})
  31. $newRow | Add-Member -NotePropertyName FilesOut -NotePropertyValue $FilesOut.Count
  32. $FilesIn = @($row.Group | Where-Object {$_.method -eq "STOR"})
  33. $newRow | Add-Member -NotePropertyName FilesIn -NotePropertyValue $FilesIn.Count
  34. $loginCount = @($row.Group | Where-Object {$_.method -eq "USER"})
  35. $newRow | Add-Member -NotePropertyName loginCount -NotePropertyValue $loginCount.Count
  36. $pivotTable.Add($newRow) | Out-Null
  37. }
  38. $pivotTable | Format-Table
  39. <!-- end snippet -->
  40. Output
  41. <!-- begin snippet: js hide: false console: true babel: false -->
  42. user IP FilesOut FilesIn loginCount
  43. ---- -- -------- ------- ----------
  44. bob1 192.45.00.00 2 0 1
  45. bob2 10.00.00.01 0 1 1
  46. <!-- end snippet -->

请注意,我只翻译代码部分,不包括输出部分。

英文:

You want a pivot table. Try this

<!-- begin snippet: js hide: false console: true babel: false -->

  1. $csv = @&quot;
  2. username method ip uri-stem
  3. ABC\bob1 RETR 192.45.00.00 file.txt
  4. - USER 10.00.00.01 bob2
  5. ABC\bob2 STOR 10.00.00.01 file1234.txt
  6. - USER 192.45.00.00 bob1
  7. ABC\bob1 RETR 192.45.00.00 file2.txt
  8. &quot;@
  9. #remove spaces at beginning of line
  10. $csv = $csv -replace &quot;.* -&quot;,&quot;-&quot;
  11. #replace spaces with comma
  12. $csv = $csv -replace &quot; +&quot;,&quot;,&quot;
  13. $table = $csv | ConvertFrom-Csv
  14. foreach($row in $table)
  15. {
  16. $row.username = $row.username -replace &quot;^.*\\&quot;,&quot;&quot;
  17. if($row.username -eq &quot;-&quot;) { $row.username = $row.&#39;uri-stem&#39; }
  18. }
  19. #$table
  20. $groups = $table | Group-Object -Property username
  21. $pivotTable = [System.Collections.ArrayList]::new()
  22. foreach($row in @($groups))
  23. {
  24. $newRow = New-Object -TypeName psobject
  25. $newRow | Add-Member -NotePropertyName user -NotePropertyValue $row.Name
  26. $firstGroup = $row.Group | Select-Object -first 1
  27. $newRow | Add-Member -NotePropertyName IP -NotePropertyValue $firstGroup.IP
  28. $FilesOut = @($row.Group | Where-Object {$_.method -eq &quot;RETR&quot;})
  29. $newRow | Add-Member -NotePropertyName FilesOut -NotePropertyValue $FilesOut.Count
  30. $FilesIn = @($row.Group | Where-Object {$_.method -eq &quot;STOR&quot;})
  31. $newRow | Add-Member -NotePropertyName FilesIn -NotePropertyValue $FilesIn.Count
  32. $loginCount = @($row.Group | Where-Object {$_.method -eq &quot;USER&quot;})
  33. $newRow | Add-Member -NotePropertyName loginCount -NotePropertyValue $loginCount.Count
  34. $pivotTable.Add($newRow) | Out-Null
  35. }
  36. $pivotTable | Format-Table

<!-- end snippet -->

Output

<!-- begin snippet: js hide: false console: true babel: false -->

  1. user IP FilesOut FilesIn loginCount
  2. ---- -- -------- ------- ----------
  3. bob1 192.45.00.00 2 0 1
  4. bob2 10.00.00.01 0 1 1

<!-- end snippet -->

huangapple
  • 本文由 发表于 2023年2月27日 06:57:24
  • 转载请务必保留本文链接:https://go.coder-hub.com/75575496.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定