none
[posh] склеить строчки из разных файлов RRS feed

  • Общие обсуждения

  • есть куча файлов, логи
    проблема в том, что некоторые файлы заканчиваются строчкой обрывающейся по середине.
    а продолжение этой строчки находится уже в следующем файле.

    например
    в файле COM15-Harris2010100711.log последняя строчка
    009 100930 102946 000000 102947 3323 ---- 002 031625 ---- ---

    а в файле COM15-Harris2010100712.log первая строчка
    ------ 526665------------ 563323---- 


    и их нужно склеить в одну, чтобы они обрабатывались в дальнейшем как одна
    длина строчек обрубков варьируется

    так вот я получаю из файлов строчки для обработки:

    dir $Log_from_HR | %{ Get-Content $Log_from_HR\$_ |%{
    if ($_.substring(0,3) -match "\d+"){
    #действия со сточкой лога
    }
    }
    }

    фалов тысячи, строчек сотни тысяч и не все файлы такие неправильные...

    13 октября 2010 г. 11:54

Все ответы

  • Правильно ли я понял, что любая необрывающаяся строка должна начинаться с 3х цифр?


    blog: http://shss.wordpress.com/
    13 октября 2010 г. 12:54
  • > фалов тысячи, строчек сотни тысяч и не все файлы такие неправильные...

    Как определить что файл "не закончен"? Может просто тупо:

     

    @echo off
    setlocal
    
    for %%i in (COM15-Harris*.log ) do call:set "%%i"
    
    cd.>fake.log
    copy fake.log%files% result.log
    goto:eof
    
    
    :set
    set "files=%files%+%1"

     

    13 октября 2010 г. 19:00
  • $ofs="+"; cmd /c copy "$(ls *.log)" result.txt

    :)


    AKA Xaegr, MCSE: Security, Messaging; MCITP: Server\Enterprise Administrator; Блог: http://xaegr.wordpress.com
    13 октября 2010 г. 19:32
    Модератор
  • gc *.log -ex res.log > res.log

     

    :))

    13 октября 2010 г. 20:01
  • Правильно ли я понял, что любая необрывающаяся строка должна начинаться с 3х цифр?


    blog: http://shss.wordpress.com/

    ну они вообще все начинаются с 3х цифр

    просто через определенное количество строчек АТС вставляет табличку в лог, что каждый столбец значит

    поэтому обрабатываю только строчки, которые начинаются с трех цифр.

    14 октября 2010 г. 2:29
  • $ofs="+"; cmd /c copy "$(ls *.log)" result.txt

    :)


    AKA Xaegr, MCSE: Security, Messaging; MCITP: Server\Enterprise Administrator; Блог: http://xaegr.wordpress.com
    а можно подробней? это мы склеиваются все файлы в один перед обработкой?
    14 октября 2010 г. 2:30
  • gc *.log -ex res.log > res.log

     

    :))

    Это, видимо, тоже склейка файлов?

    я ж говорю, файлов тонна. текстовых файлов plain text (ASCII) на пару гигов.

    если я все это склею в один файл, а потом содержимое файла загружу в память для обработки..

     

    14 октября 2010 г. 2:33
  •  

    gc *.log -ex res.log > res.log

    не работает

     

    001 100930 102902 102914 102919 6504 ---- 021 032005 3794 --- 040615 563794------------ 4999596504
    009 100930 102935 000000 102936 3323 ---- 002 031624 ---- --- ------ 526665------------ 563323----
    002 100930 102856 000000 102947 ---- 3144 --- 032215 ---- 001 031418 566511------------ ----------
    009 100930 102946 000000 102947 3323 ---- 002 031625 ---- ---
     ------ 526665------------ 563323----
    010 100930 102919 000000 102956 ---- 3794 --- 040615 ---- --- ------ ------------------ ----------
    010 100930 102947 000000 102957 ---- 3911 --- 041404 ---- --- ------ 525077------------ ----------
    004 100930 102948 000000 103015 3590 ---- 002 031626 ---- 020 012420 525306------------ 563590---- 

     

    14 октября 2010 г. 3:36
  •  

    $ofs="+"; cmd /c copy "$(ls *.log)" result.txt
    
    

     

    работает

     

    002 100930 102815 102828 102901 ---- 3770 --- 040507 ---- 020 012413 526336------------ ----------
    001 100930 102902 102914 102919 6504 ---- 021 032005 3794 --- 040615 563794------------ 4999596504
    009 100930 102935 000000 102936 3323 ---- 002 031624 ---- --- ------ 526665------------ 563323----
    002 100930 102856 000000 102947 ---- 3144 --- 032215 ---- 001 031418 566511------------ ----------
    009 100930 102946 000000 102947 3323 ---- 002 031625 ---- --- ------ 526665------------ 563323----
    
    010 100930 102919 000000 102956 ---- 3794 --- 040615 ---- --- ------ ------------------ ---------- 010 100930 102947 000000 102957 ---- 3911 --- 041404 ---- --- ------ 525077------------ ---------- 004 100930 102948 000000 103015 3590 ---- 002 031626 ---- 020 012420 525306------------ 563590----
    можно прокомментировать ? что такое $ofs ? и каким он там боком?

     

    14 октября 2010 г. 3:40
  • > gc *
    .log -
    ex res.log >
     res.log
    

    >> не работает

    Оно и понятно, просто добавляет один файл к другому

     

    > можно прокомментировать ? что такое $ofs ? и каким он там боком?

     

    get-help about_Preference_Variables

    $OFS - Output Field Separator. При преобразовывании массива:

    $(ls *.log)
    

    в строку:

    "$(ls *.log)"
    

    задает в качестве разделителя в строке знак "+". Эта строка, вида

     

    file1.log+file2.log+....+fileN.log,

    скармливается внутренней команде cmd.exe `copу'

    Все равно, что:

    @echo off

    if not exist res.log cd.>res.log
    for %%i in (*.log) do if not "%%i"=="res.log" copy /b res.log+"%%i" res.log

     

     

    14 октября 2010 г. 9:31