2016-09-05 31 views
-2

現在、適切な形式ではないテキストファイルをどのように解析できるかを理解する上で助けが必要です。そのため、ログの内容を読みにくいです。テキスト入力ファイルは以下のようになります。テキストファイルを解析する助けが必要

========== Test1 (1) ========== Id UTC Date/Time Message 4d1eb19c-5420-4bb2-9e21-65880eb90429 08-30T01:26:24Z Messagel Name='abz', Connection='Usb', Fleet Report Id='ca9d3457-1564-4066-8f5e-12345678', Fleet Proxy Id ='ghjfda7-c7e8-4bb2-9dd4-2f4c3b2498a3,4d1eb19c-5420-4bb2-9e21-65880eb90429 08-30T01:26:24Z Message2 Name='abz', Connection='Usb', Fleet Report Id='ca9d3457-1564-4066-8f5e-12345678', Fleet Proxy Id ='ghjfda7-c7e8-4bb2-9dd4-2f4c3b2498a3.,4d1eb19c-5420-4bb2-9e21-65880eb90429 08-30T01:26:24Z Message2 Name='abz', Connection='Usb', Fleet Report Id='ca9d3457-1564-4066-8f5e-12345678', Fleet Proxy Id ='ghjfda7-c7e8-4bb2-9dd4-2f4c3b2498a3. 

========== Test2 (1) ========== Id UTC Date/Time Message 4d1eb19c-5420-4bb2-9e21-65880eb90429 08-30T01:26:24Z Message2 Name='xyz', Connection='Usb', Fleet Report Id='ca9d09e7-1564-4066-8f5e-6a123456', Fleet Proxy Id ='0fsfsda7-c7e8-4bb2-9dd4-2f4c3b2498a3,4d1eb19c-5420-4bb2-9e21-65880eb90429 08-30T01:26:24Z Message2 Name='abz', Connection='Usb', Fleet Report Id='ca9d3457-1564-4066-8f5e-12345678', Fleet Proxy Id ='ghjfda7-c7e8-4bb2-9dd4-2f4c3b2498a3.,4d1eb19c-5420-4bb2-9e21-65880eb90429 08-30T01:26:24Z Message2 Name='abz', Connection='Usb', Fleet Report Id='ca9d3457-1564-4066-8f5e-12345678', Fleet Proxy Id ='ghjfda7-c7e8-4bb2-9dd4-2f4c3b2498a3.

複数のセクション{にTest1 test2は... n}は、それぞれのセクションがありますが、複数のID UTCの日付時刻とメッセージが含まれても、すべてのセクションは

で始まり、

で終了します

表形式で並べるにはどうすればいいですか?表形式で以下のようにフォーマットされるように、出力を必要とする:

ID UTC Date/Time Message 

========== Test1 (1) ========== 

Id         UTC Date/Time Message 
4d1eb19c-5420-4bb2-9e21-65880eb90429 08-30T01:26:24Z Messagel Name='abz', Connection='Usb', Fleet Report Id='ca9d3457-1564-4066-8f5e-12345678', Fleet Proxy Id ='ghjfda7-c7e8-4bb2-9dd4-2f4c3b2498a3. 

4d1eb19c-5420-4bb2-9e21-65880eb90429 08-30T01:26:24Z Message2 Name='abz', Connection='Usb', Fleet Report Id='ca9d3457-1564-4066-8f5e-12345678', Fleet Proxy Id ='ghjfda7-c7e8-4bb2-9dd4-2f4c3b2498a3. 

4d1eb19c-5420-4bb2-9e21-65880eb90429 08-30T01:26:24Z Message3 Name='abz', Connection='Usb', Fleet Report Id='ca9d3457-1564-4066-8f5e-12345678', Fleet Proxy Id ='ghjfda7-c7e8-4bb2-9dd4-2f4c3b2498a3. 

========== Test2 (1) ========== 
Id         UTC Date/Time Message 
4d1eb19c-5420-4bb2-9e21-65880eb90429 08-30T01:26:24Z Message1 Name='xyz', Connection='Usb', Fleet Report Id='ca9d09e7-1564-4066-8f5e-6a123456', Fleet Proxy Id ='0fsfsda7-c7e8-4bb2-9dd4-2f4c3b2498a3, 

4d1eb19c-5420-4bb2-9e21-65880eb90429 08-30T01:26:24Z Message2 Name='abz', Connection='Usb', Fleet Report Id='ca9d3457-1564-4066-8f5e-12345678', Fleet Proxy Id ='ghjfda7-c7e8-4bb2-9dd4-2f4c3b2498a3, 

4d1eb19c-5420-4bb2-9e21-65880eb90429 08-30T01:26:24Z Message3 Name='abz', Connection='Usb', Fleet Report Id='ca9d3457-1564-4066-8f5e-12345678', Fleet Proxy Id ='ghjfda7-c7e8-4bb2-9dd4-2f4c3b2498a3.

これは私が試してみましたが、それはテキストファイル内のすべてのコンテンツを解析していないものです。

$file = Get-Content -path .\ViewSource.txt | Where-Object { 
    $_ -ne "" 
} | ForEach-Object { 
    $_ -replace '<[^>]+>', '' 
} 
foreach ($line in $file) { 
    $elements = $line.Split(" ", [StringSplitOptions]::RemoveEmptyEntries) 
    [PSCustomObject]@{ 
    Id   = $elements[8] 
    UtcDateTime = $elements[9] 
    Message  = $elements[10..19] -join " " 
    } 
} 
+0

すべてのセクションの開始と終了の表示を忘れています。また、複数のセクションがあるときにソースファイルがどのように見えるかははっきりしません。投稿ビットの場合は、 '' '(Get-Content。\ 1.txt)のようなものを使うことができます - '^(= +。+?= +)(。+)'、 '' $ 1'r'n'r 'n' $ 2'r'n" | Out-File r:\ 2.txt -Encoding utf8''' – wOxxOm

+0

最初に試したことをお見せください。あなたは少なくともいくつかの努力を示していることが期待されます。現時点では、これはSOが何であるかではないコード書き込み要求として読み込まれます。 – Matt

+0

あなたの助けをありがとう...それは

で始まる========== Test1(1)========== Id UTC Date ..

Sam

答えて

0

あなたのIDとタイムスタンプのフィールドが固定幅を持って、ラインごとに複数のメッセージがあるように思われないので、最も簡単な方法は、おそらく適切に包まれた/書式設定で「インライン」ヘッダを置き換えることであろうヘッダ行:

$inline = ' Id UTC Date/Time Message ' 
$wrapped = "`nId         UTC Date/Time Message`n" 
(Get-Content -Path 'C:\path\to\input.txt') -replace $inline, $wrapped | 
    Set-Content -Path 'C:\path\to\output.txt' 

編集:あなたが行ごとに複数のメッセージを持っている場合あなたは、各メッセージの前GUIDおよびタイムスタンプのシーケンスにマッチし、それらの試合の前に改行を挿入する必要があります。

$inline = ' Id UTC Date/Time Message ' 
$wrapped = "`nId         UTC Date/Time Message" 

$guid = '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' 
$ts = '\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z' 

(Get-Content 'C:\path\to\input.txt') -replace $inline, $wrapped -replace "($guid) +($ts) +", "`n`$1 `$2 " | 
    Set-Content -Path 'C:\path\to\output.txt' 
+0

ありがとう。しかし、テキストファイルは、メッセージ

から始まり、

で終わる1行に複数のメッセージがあり、見出しIDの日付/時刻とメッセージを含む表形式ですべてのメッセージをフォーマットする必要があります。あなたの時間のためにもう一度あなたに非常に感謝します。 – Sam

関連する問題