2015-09-23 6 views
1

Я создаю синтаксический анализатор в powershell для преобразования дампов журнала vmstat в CSV-файлы в качестве вклада в структуру графиков (Rickshaw). Я повторяю «заголовки» в файле, который хотел бы удалить. Образец данных выглядит следующим образом:Как удалить пустые строки из текстового файла с помощью powershell

Tue Sep 1 14:03:26 2015: procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- 
    Tue Sep 1 14:03:26 2015: r b swpd free buff cache si so bi bo in cs us sy id wa st 
    Tue Sep 1 14:03:26 2015: 0 1 224412 358316 248772 63286912 0 0 388 267 1 1 8 0 91 1 0  
    Tue Sep 1 14:03:36 2015: 0 0 224412 357572 248796 63286916 0 0  0  8 220 261 0 0 100 0 0 
    Tue Sep 1 14:03:46 2015: 0 0 224412 357696 248808 63286916 0 0  0 14 276 293 0 0 100 0 0 
    Tue Sep 1 14:03:56 2015: 0 0 224412 357688 248808 63286916 0 0  0 13 231 269 0 0 100 0 0 
    Tue Sep 1 14:04:06 2015: 0 0 224412 357300 248812 63286920 0 0  0 17 266 283 0 0 100 0 0 
    Tue Sep 1 14:06:56 2015: procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- 
    Tue Sep 1 14:06:56 2015: r b swpd free buff cache si so bi bo in cs us sy id wa st 
    Tue Sep 1 14:06:56 2015: 1 0 224412 357348 248976 63286928 0 0  0  1 182 231 0 0 100 0 0 
    Tue Sep 1 14:07:06 2015: 0 0 224412 357348 248980 63286928 0 0  0  9 211 251 0 0 100 0 0 
    Tue Sep 1 14:07:16 2015: 0 0 224412 357136 248988 63286928 0 0  0 19 287 279 0 0 100 0 0 
    Tue Sep 1 14:07:26 2015: 0 0 224412 357012 249004 63286928 0 0  0  9 199 244 0 0 100 0 0 
    Tue Sep 1 14:07:36 2015: 0 0 224412 357080 249012 63286928 0 0  0  7 235 258 0 0 100 0 0 
    Tue Sep 1 14:10:26 2015: procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- 
    Tue Sep 1 14:10:26 2015: r b swpd free buff cache si so bi bo in cs us sy id wa st 
    Tue Sep 1 14:10:26 2015: 12 0 224400 351832 265992 62560000 6 0 15 25262 8579 617 96 4 0 0 0  
    Tue Sep 1 14:10:36 2015: 12 0 224400 379200 266064 62444728 0 0  2 16727 8418 761 97 3 0 0 0  

Я использую этот бит кода, чтобы это сделать.

Get-Content "C:\Projects\Play\Garage\Data_Processing\Sampler.log" | select-string -pattern 'procs|swpd' -notmatch | Out-File "C:\Projects\Play\Garage\Data_Processing\Refined.log" 

Результирующий файл имеет искомые линии, но вместо этого они имеют пустые строки, вставленные в начале и в конец. Из-за этого я не могу отправить эти данные/файл на следующий шаг анализа. Что я могу делать неправильно?

Результирующие данные файла:

> [BLANK LINE] 
    Tue Sep 1 14:03:26 2015: 0 1 224412 358316 248772 63286912 0 0 388 267 1 1 8 0 91 1 0  
    Tue Sep 1 14:03:36 2015: 0 0 224412 357572 248796 63286916 0 0  0  8 220 261 0 0 100 0 0  
    Tue Sep 1 14:03:46 2015: 0 0 224412 357696 248808 63286916 0 0  0 14 276 293 0 0 100 0 0  
    Tue Sep 1 14:03:56 2015: 0 0 224412 357688 248808 63286916 0 0  0 13 231 269 0 0 100 0 0  
    Tue Sep 1 14:04:06 2015: 0 0 224412 357300 248812 63286920 0 0  0 17 266 283 0 0 100 0 0  
    Tue Sep 1 14:06:56 2015: 1 0 224412 357348 248976 63286928 0 0  0  1 182 231 0 0 100 0 0  
    Tue Sep 1 14:07:06 2015: 0 0 224412 357348 248980 63286928 0 0  0  9 211 251 0 0 100 0 0  
    Tue Sep 1 14:07:16 2015: 0 0 224412 357136 248988 63286928 0 0  0 19 287 279 0 0 100 0 0  
    Tue Sep 1 14:07:26 2015: 0 0 224412 357012 249004 63286928 0 0  0  9 199 244 0 0 100 0 0  
    Tue Sep 1 14:07:36 2015: 0 0 224412 357080 249012 63286928 0 0  0  7 235 258 0 0 100 0 0  
    Tue Sep 1 14:10:26 2015: 12 0 224400 351832 265992 62560000 6 0 15 25262 8579 617 96 4 0 0 0  
    Tue Sep 1 14:10:36 2015: 12 0 224400 379200 266064 62444728 0 0  2 16727 8418 761 97 3 0 0 0  
>[BLANK LINE] 
>[BLANK LINE] 
>[BLANK LINE] 
+1

Простой ответ: у вас есть пустые строки в текстовом файле? Может быть, проблема с кодировкой или удвоена длина строки ... Выберите строку не будет _making_ поддельный текст (насколько я знаю.) С текстом, как показано, я не могу дублировать вашу проблему. – Matt

ответ

3

Не уверен, почему Select-String делают пустые строки, но вы могли бы заменить Select-String с простой Where-Object который бы не возвращать пустые строкам

Вот как я хотел бы сделать это:

Get-Content "C:\Projects\Play\Garage\Data_Processing\Sampler.log" | Where-Object -FilterScript {$_ -notmatch 'procs|swpd'} | Out-File "C:\Projects\Play\Garage\Data_Processing\Refined.log" 
+2

Вы также можете пропустить предложение where: '(Get-Content" C: \ Projects \ Play \ Garage \ Data_Processing \ Sampler.log ") -notmatch 'procs | swpd'' – Matt

+0

Спасибо, Блюкекс и Мэтт, это сработало. – petwolfe

+0

У меня была такая же проблема, когда 'select-string -pattern' приводил к пустым строкам, хотя входной файл не имел пустых строк. Использование 'where' решило его. – wisbucky