0

serviceOut_live.txt次の行を含むファイルがあります。

[GC 1028838K->827912K(1305024K), 0.0311954 secs]

serviceOut_live.txtそして、このファイルをこの形式の別のファイルに変換したいresul.txt:

1028838 20131030165102

これは私のコードです:

$input_path = 'c:\a\a\serviceOut_live.txt'

$output_file = 'c:\a\a\resul.txt'

$regex = '\[GC (\d{0,9})K->(\d{0,9})'

echo $(select-string -Path $input_path -Pattern $regex -AllMatches | % {
  $_.matches[0].groups[1].value , $(get-date -format "yyyyMMddHHmmss")
} ) > $output_file

しかし、結果は次の 2 行にあります。

1028838

20131030165102

そして、結果を1行で表示したい:

1028838 20131030165102

どうすればそれができますか?


ヒントをありがとうございました。私は自分自身を説明していないと思います。これは元のファイルです: [GC 1028838K->827912K(1305024K), 0.0311954 秒] そして、結果を複数行にしたい:

\n = キャリッジ リターン

1028838 20131030165102\n 1028822 20131030165103\n 1029999 20131030165107\n

どうすればそれができますか?

4

3 に答える 3

2

各行を、最初のスペースの後と「K」の前にある一致する数字のグループに置き換え、それを現在の日付と連結します

Get-Content $input_path | 
ForEach-Object { ($_ -replace '^\[GC (\d+)K->.*$','$1') +' '+ (get-date -f yyyyMMddHHmmss) } | 
Out-File $output_file
于 2013-10-30T16:54:42.723 に答える
1

1 つの方法は、[string] としてキャストすることです。

 echo ([string]$(select-string -Path $input_path -Pattern $regex -AllMatches |
  % { $_.matches[0].groups[1].value , $(get-date -format "yyyyMMddHHmmss") } )) > $output_file
于 2013-10-30T16:51:54.930 に答える
0

あなたが本当に長い行が好きなら(私は好きではありません):

$(select-string -Path $input_path -Pattern $regex -AllMatches).Matches[0].Groups[1].Value + " " + (get-date -f yyyyMMddHHmmss) > $output_file

これもファイル内の最初の一致のみを取得し、一致が見つからない場合は失敗することに注意してください。

于 2013-10-30T17:19:25.573 に答える