1

ログファイル名と、ログファイルに「ERROR:」を含む対応するエラーを含むデータセットを作成しようとしています。ログファイルはUNIX上にあり、SASでそのunixパスにアクセスし、「ERROR:」文字列を検索して作成します。ログファイル名とエラーのあるデータセット。私はそれを達成する方法の手がかりを持っていません....何か助けはありますか?

よろしくお願いします、サム。

これが私が探しているものの例です。UNIXの/tcrsk/ dev / Logsフォルダの下にa.log、b.log、c.log、...n.logファイルがあるとします。すべてのログファイルをループし、このような2つの変数を使用してデータセットを作成します。 LOg_Name ERROR_Message a.log ERROR:Missing b.log ERROR:No data set c.log ERROR:A lock is not avialable この例で詳細がわかると思います。

4

2 に答える 2

3

あなたのフォルダ構造についてもっと知らなければ、私は問題の最初の部分についてコメントすることはできません。ログファイルの名前がわかったら、次のようなものを使用できます。

次のコードは2つのデータセットを作成します。1つ目は完全なログで、ログの1行に1つの観測値があります。2番目のデータセットには、「ERRORS」として識別された行のみが含まれています。コードのタイプミスやその他の構文またはセマンティックの問題を隠す可能性があるため、特定の警告とメモステートメントをエラーと見なしていることに注意してください。

%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;
于 2013-03-20T19:33:08.220 に答える
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);

追加が必要かどうか教えてください....ありがとう、サム。

于 2013-03-21T19:58:00.803 に答える