documents:proglang:powershell:powershell-001
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン | |||
| documents:proglang:powershell:powershell-001 [2026/05/08 12:00] – ↷ documents:os:windows:powershell:powershell-001 から documents:proglang:powershell:powershell-001 へページを移動しました。 k896951 | documents:proglang:powershell:powershell-001 [2026/05/13 07:20] (現在) – k896951 | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| + | ====== 004.PowerShellテキスト分割ツール ====== | ||
| + | |||
| + | 2024-08-31.3\\ オプション -ReadLine を -SplitLine に変更した\\ \\ | ||
| + | 2024-08-31.2\\ アドバイスをもらってGet-Contentに-ErrorAction Stopを追加\\ \\ | ||
| + | 2024-08-31\\ ちょっと作り直した | ||
| + | |||
| + | ===== これは何? ===== | ||
| + | |||
| + | 指定のテキストファイルを指定の行数毎に分割するやっつけスクリプト。動作は少々重め。 | ||
| + | |||
| + | ===== 使い方 ===== | ||
| + | |||
| + | PowerShellが実行可能な環境であるのは前提条件。\\ | ||
| + | エラー処理を省いている。引数の範囲や指定漏れ等を確認していない。利用に際しては注意。 | ||
| + | |||
| + | < | ||
| + | .\splitlog.ps1 -Path ログテキストファイル名 | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | |||
| + | ==== 指定行数で分割する ==== | ||
| + | |||
| + | 以下はあるアプリケーションのログpdi.2024-01-20.logを1000行単位で分割する例。\\ | ||
| + | この例だと、pdi.2024-01-20.log-001~008 の8ファイルに分割された。\\ | ||
| + | 表示されるタイプスタンプは処理開始日時。 | ||
| + | < | ||
| + | d: | ||
| + | 2024/08/31 18:54:35 Pos: | ||
| + | 2024/08/31 18:54:35 Pos: | ||
| + | 2024/08/31 18:54:35 Pos: | ||
| + | 2024/08/31 18:54:36 Pos: | ||
| + | 2024/08/31 18:54:36 Pos: | ||
| + | 2024/08/31 18:54:37 Pos: | ||
| + | 2024/08/31 18:54:37 Pos: | ||
| + | 2024/08/31 18:54:38 Pos: | ||
| + | 2024/08/31 18:54:39 Pos: | ||
| + | 2024/08/31 18:54:39 Pos: | ||
| + | |||
| + | d: | ||
| + | </ | ||
| + | |||
| + | ==== 指定行数を読み飛ばす ==== | ||
| + | |||
| + | 以下は先頭6500行をスキップして300行毎に分割している例。 | ||
| + | < | ||
| + | d: | ||
| + | 2024/08/31 18:55:14 Pos: | ||
| + | 2024/08/31 18:55:14 Pos: | ||
| + | 2024/08/31 18:55:14 Pos: | ||
| + | 2024/08/31 18:55:14 Pos: | ||
| + | 2024/08/31 18:55:14 Pos: | ||
| + | |||
| + | d: | ||
| + | </ | ||
| + | |||
| + | ==== エンコーディングを指定する ==== | ||
| + | |||
| + | 以下はログの文字コード(エンコーディング)にUTF8を指定して2000行毎に分割する例。 | ||
| + | < | ||
| + | d: | ||
| + | 2024/08/31 18:56:11 Pos: | ||
| + | 2024/08/31 18:56:11 Pos: | ||
| + | 2024/08/31 18:56:12 Pos: | ||
| + | 2024/08/31 18:56:13 Pos: | ||
| + | 2024/08/31 18:56:14 Pos: | ||
| + | 2024/08/31 18:56:15 Pos: | ||
| + | |||
| + | d: | ||
| + | </ | ||
| + | |||
| + | ==== 範囲を指定して分割する ==== | ||
| + | |||
| + | 以下は先頭から5000行スキップし、5001行~6000行の間を500行毎に分割している例。 | ||
| + | < | ||
| + | d: | ||
| + | 2024/08/31 18:58:05 Pos: | ||
| + | 2024/08/31 18:58:06 Pos: | ||
| + | 2024/08/31 18:58:06 Pos: | ||
| + | 2024/08/31 18:58:06 Pos: | ||
| + | |||
| + | d: | ||
| + | </ | ||
| + | |||
| + | ===== コード ===== | ||
| + | |||
| + | とりあえずやっつけ。 | ||
| + | |||
| + | <code powershell splitlog.ps1> | ||
| + | Param( | ||
| + | $Path, | ||
| + | $SplitLine=1000, | ||
| + | $SkipLine=0, | ||
| + | $LimitLine=0, | ||
| + | $Encode=" | ||
| + | ) | ||
| + | |||
| + | $SkipFlag = $true | ||
| + | $LineCounter = 0 | ||
| + | $BreakCounter = 0 | ||
| + | $FileNameIndex = 1 | ||
| + | |||
| + | $SDate = Get-Date -DisplayHint DateTime | ||
| + | if ($LimitLine -eq 0) { | ||
| + | Write-Host | ||
| + | } | ||
| + | else { | ||
| + | Write-Host | ||
| + | } | ||
| + | |||
| + | foreach($line in Get-Content -Path $Path -Encoding $Encode -ErrorAction Stop) | ||
| + | { | ||
| + | $LineCounter++ | ||
| + | |||
| + | if ($SkipFlag -eq $true) { | ||
| + | if (($SkipLine -eq 0) -or ($LineCounter -gt $SkipLine)) | ||
| + | { | ||
| + | $SkipFlag = $false | ||
| + | } | ||
| + | else { | ||
| + | continue | ||
| + | } | ||
| + | } | ||
| + | |||
| + | if ($BreakCounter -eq 0) { | ||
| + | $SplitPartFile = " | ||
| + | $SDate | ||
| + | $BeginLine | ||
| + | |||
| + | Set-Content | ||
| + | Clear-Content -Path $SplitPartFile | ||
| + | |||
| + | Write-Host | ||
| + | } | ||
| + | |||
| + | $BreakCounter++ | ||
| + | Add-Content -Path $SplitPartFile -Value $line | ||
| + | |||
| + | if ($BreakCounter -eq $SplitLine) { | ||
| + | $FileNameIndex++ | ||
| + | $BreakCounter = 0 | ||
| + | } | ||
| + | |||
| + | if (($LimitLine -ne 0) -and ($LineCounter -eq $LimitLine)) { | ||
| + | break | ||
| + | } | ||
| + | } | ||
| + | |||
| + | $SDate = Get-Date -DisplayHint DateTime | ||
| + | Write-Host | ||
| + | |||
| + | </ | ||
| + | |||
| + | {{tag> | ||
documents/proglang/powershell/powershell-001.txt · 最終更新: by k896951
