2013-03-20 1 views
1

Попытка создать набор данных с именами файлов журналов и ошибками корреспонденции, которые содержат «ERROR:» в файле журнала .Log находятся в UNIX, и я хочу получить доступ к этому пути unix на SAS и искать строку «ERROR:» и создать набор данных с именем файла журнала и ошибкой. У меня нет подсказки, как добиться этого .... Любая помощь?Как проверить каждый файл журнала в папке UNIX для «ERROR:» в SAS? Файлы журнала находятся в UNIX

Заранее благодарен, Сэм.

Вот пример того, что я ищу. Предположим, что у меня есть файлы l.l, b.log, c.log, ... n.log в папке/tcrsk/dev/Logs в UNIX.Trying для программы, которая проходит через все файлы журнала и создает набор данных с двумя переменными, такими как LOg_Name ERROR_Message a.log ERROR:Missing b.log ERROR:No data set c.log ERROR:A lock is not avialable. Я думаю, этот пример дает более подробную информацию ....

+0

Нужна дополнительная информация. SAS находится в unix или в окнах? Как вы обычно получаете доступ к местоположению unix? – Joe

+0

@Joe, Да SAS работает на UNIX. Структура накопителя есть/tcrsk/dev/Logs .. –

ответ

3

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

Приведенный ниже код создает 2 набора данных. Первый - это всего лишь полный журнал, по одному наблюдению на строку в журнале. Второй набор данных содержит только те строки, которые были идентифицированы как «ОШИБКИ». Обратите внимание, что я считаю некоторые предупреждения и заявления записные как ошибки, поскольку они могут скрыть опечатки или другой синтаксис или семантические проблемы с кодом:

%let logfile = myfile.log; 

** 
** READ IN LOGFILE. CHECK FOR PROBLEMS 
*; 

data problems log; 
    length line $1000; 

    infile "&logfile"; 
    input; 

    logfile = "&logfile"; 
    line_no = _n_; 
    line = _infile_; 
    problem = 0; 

    if 
    (
    line =: "ERROR:" 
    or line =: "WARNING:" 
    or line =: "NOTE: Numeric values have been converted to character values" 
    or line =: "NOTE: Character values have been converted to numeric values" 
    or line =: "NOTE: Missing values were generated as a result of performing an operation on missing values" 
    or line =: "NOTE: MERGE statement has more than one data set with repeats of BY values" 
    or line =: "NOTE: Invalid (or missing) arguments to the INTNX function have caused the function to return" 
    or line =: "INFO: Character variables have defaulted to a length of 200" 
    or line =: "NOTE: Invalid" 
) 
    and not 
    (
     line =: "WARNING: Your system is scheduled to expire" 
    or line =: "WARNING: The Base Product product with which Session Manager is associated" 
    or line =: "WARNING: will be expiring soon, and is currently in warning mode to indicate" 
    or line =: "WARNING: this upcoming expiration. Please run PROC SETINIT to obtain more" 
    or line =: "WARNING: information on your warning period." 
    or line =: "WARNING: This CREATE TABLE statement recursively references the target table. A consequence" 
    or line =: "WARNING: Unable to copy SASUSER registry to WORK registry. Because of this, you will not see registry customizations during this" 
    or line =: "ERROR: A lock is not available for" 
    or line =: "ERROR: Errors printed on page" 
) 
    then do; 
    problem = 1; 
    output problems; 
    end; 
    output log; 
run; 
0
/*Creating a dat file with the list of .log files and ERROR: in their body*/  
X 'ls -1 /fbrms01/dev/Logs/*.log | xargs grep -l "ERROR:" 
               > /fbrms01/dev/Logs/log_error.dat'; 
    data log_list; **Accessing dat fil from UNIX and creating dataset on SAS; 
    infile '/fbrms01/dev/Logs/log_error.dat' dsd dlm='|' lrecl=1024; 
    input Lname :$75.; 
    run; 
    options symbolgen mprint mlogic; 
    %macro logfile(DS); 
    %let dsid = %sysfunc(open(&DS)); 
    /*%let obs = %sysfunc(attrn(&dsid,nobs));**To get number of observations in log_list;*/ 
    Proc datasets; 
    Delete All_Errors; 
    %do %while (%sysfunc(fetch(&dsid)) = 0);/*To run the loop thru log_list till the end of obs*/ 
    %let logfile = %sysfunc(getvarc(&dsid,1));/*To get value */ 
      data problems ; 
       length line $1000 logfile $100; 
       infile "&logfile"; 
       input; 
       logfile = "&logfile"; 
       line_no = _n_; 
       line = _infile_; 

       if line =: "ERROR:" then do; 
       output problems; 
       end; 
      run; 
      Proc Append Base=All_Errors data=Problems force; 
      Run; 
     %end; 
    %MEND; 
    %logfile(log_list); 

Позвольте мне знать, если он нуждается в каких-либо дополнений .... Спасибо, Сэм.

 Смежные вопросы

  • Нет связанных вопросов^_^