Windowsでログファイルをチェックするにはこれらのコマンドが必要ですが、プログラムをインストールせず、WindowsのPowershellが好きです。
Get-Content
(別名:gc
)は、テキストファイルを読み取るための通常のオプションです。その後、さらにフィルタリングできます。
gc log.txt | select -first 10 # head
gc -TotalCount 10 log.txt # also head
gc log.txt | select -last 10 # tail
gc -Tail 10 log.txt # also tail (since PSv3), also much faster than above option
gc log.txt | more # or less if you have it installed
gc log.txt | %{ $_ -replace '\d+', '($0)' } # sed
これは小さなファイルには十分に機能しますが、大きなファイル(数MiB以上)はおそらく少し遅いです。
PowerShell Community Extensions には、特殊なファイルに関するコマンドレット(Get-FileTailなど)が含まれます。
head
およびtail
を実行する組み込みの方法を次に示します。パイプを使用しないでください。大きなファイルがある場合、非常に遅くなります。これらの組み込みオプションの使用は、巨大なファイルに対しても非常に高速です。
gc log.txt -head 10
gc log.txt -tail 10
gc log.txt -tail 10 -wait # equivalent to tail -f
more.exe
はWindowsに存在し、less
のポートは簡単に見つかります(そして PowerShell Community Extensions 、PSCXには含まれています)。
PowerShellは、どちらの場合も個別のプログラムに代わるものを実際には提供しませんが、構造化データの場合はOut-Grid
が役立ちます。
Head
およびTail
は、それぞれSelect-Object
および-First
パラメーターを使用して、-Last
でエミュレートできます。
Sed
関数はすべて使用可能ですが、構造がかなり異なります。フィルタリングオプションは、Where-Object
(またはForeach-Object
および範囲の一部の状態)で使用できます。その他の変換操作は、Select-Object
およびForeach-Object
を使用して実行できます。
ただし、PowerShellが(.NET)オブジェクトを渡すと、すべての型付けされた構造(たとえば、日付はDateTime
インスタンスのままです–各コマンドがそれ自体を解析する必要がある単なる文字列ではなく、sed
および他のそのようなプログラムの多くは冗長です。
このインスタンスの「-TotalCount」は、「-head」とまったく同じように応答します。そのようなコマンドを実行するには、-TotalCountまたは-headを使用する必要があります。しかし、-TotalCountは誤解を招く-実際にはどのようなカウントを行っても機能しません...
gc -TotalCount 25 C:\scripts\logs\robocopy_report.txt
PS 5.1でテストされた上記のスクリプトは、以下と同じ応答です...
gc -head 25 C:\scripts\logs\robocopy_report.txt
それで、すでに '-head 25 "を使用してください!
Windowsで大きな(または小さな)ログファイルを照会する必要がある場合、私が見つけた最良のツールはMicrosoftの無料 Log Parser 2.2 です。必要に応じてPowerShellから呼び出すことができ、すべての面倒な作業を高速で実行します。
$Push_Pop = $ErrorActionPreference #Suppresses errors
$ErrorActionPreference = “SilentlyContinue” #Suppresses errors
#Script
#gc .\output\*.csv -ReadCount 5 | %{$_;throw "pipeline end!"} # head
#gc .\output\*.csv | %{$num=0;}{$num++;"$num $_"} # cat -n
gc .\output\*.csv | %{$num=0;}{$num++; if($num -gt 2 -and $num -lt 7){"$num $_"}} # sed
#End Script
$ErrorActionPreference = $Push_Pop #Suppresses errors
PushpopコードBTWではすべてのエラーが発生するわけではありません。コードは「sed」オプションでのみ機能します。残りはすべてgcとpath以外を無視します。
私はいくつかのより良い解決策を得ました:
gc log.txt -ReadCount 5 | %{$_;throw "pipeline end!"} # head
gc log.txt | %{$num=0;}{$num++;"$num $_"} # cat -n
gc log.txt | %{$num=0;}{$num++; if($num -gt 2 -and $num -lt 7){"$num $_"}} # sed