我刚接触awk,正在尝试解析/透视由SAS或Excel使用的JIL

我正在尝试解析我负责管理的所有300多个Autosys作业,并希望能够解析300+个大型autosys作业JIL文件以使某些报告自动化。

我在允许使用什么软件方面受到严格限制。我最近发现了这个awk脚本。我尝试了SAS解决方案,但这仅获得了我1/2的数据。 Perl脚本可以工作,但是我对Perl不熟悉。 Awk对我来说似乎更容易理解和利用

awk -F ' *[[:alnum:]_]*: *' 'BEGIN         {h="insert_job;box_name;machine;command;owner;permission;date_conditions;days_of_week;run_calendar;start_times;condition;description;std_out_file;std_err_file;alarm_if_fail;profile;priority;alarm_if_terminated;timezone;group;application;resources;"; print h; n=split(h,F,/;/)}
                             function pr() {if(F[1] in A) {for(i=1;i<=n;i++)printf "%s%s",A[F[i]],(i<n)?";":RS}}
                             /insert_job/  {pr(); delete A}
                                           {for(i in F){if($0~"^"F[i])A[F[i]]=$2}}
                             END           {pr()}' /foo/bar/all.jil > /foo/bar/outfile2.txt

Jil样本(这是输入):

/* ----------------- somejob ----------------- */ 

insert_job: somejob   job_type: CMD 
command: SAS ${AUTO_ROOT}/pgms/somejob.sas
machine: someserver.com
owner: user1
permission: gx,wx
date_conditions: 1
run_calendar: 1st_bus_dom
start_times: "07:00"
condition: s(someotherjob)
description: "Send email notification."
std_out_file: "${AUTO_JOB_LOG}.out"
std_err_file: "${AUTO_JOB_LOG}.err"
alarm_if_fail: 1
profile: "/foo/bar/etc/app1"
alarm_if_terminated: 1
timezone: CST6CDT
group: grp1
application: app1
resources: (someresource,QUANTITY=2,FREE=A)

/* ----------------- somejob2 ----------------- */ 

insert_job: somejob2   job_type: CMD 
command: SAS ${AUTO_ROOT}/pgms/somejob2.sas
machine: someserver.com
owner: user1
permission: gx,FREE=A)

样本输出

insert_job;box_name;machine;command;owner;permission;date_conditions;days_of_week;run_calendar;start_times;condition;description;std_out_file;std_err_file;alarm_if_fail;profile;priority;alarm_if_terminated;timezone;group;application;resources;
somejob;;someserver.com;SAS ${AUTO_ROOT}/pgms/somejob.sas;user1;gx,wx;1;;1st_bus_dom;"07:00";s(someotherjob);"Send email notification.";"${AUTO_JOB_LOG}.out";"${AUTO_JOB_LOG}.err";1;"/foo/bar/etc/app1";;1;CST6CDT;grp1;app1;(someresource,FREE=A);
somejob2;;someserver.com;SAS ${AUTO_ROOT}/pgms/somejob2.sas;user1;gx,FREE=A);

我想弄清楚为什么未将start_times正确解析为outfile2.txt。我只是从该行收到第一个“。

编辑:看起来printf的RegExpression部分没有读取和打印数字字符。我不确定现在如何解决此问题。

编辑2:“外观”问题意味着“ start_times”内容。我一直在尝试自己解决这个问题,但是我没有运气。 当前输出仅添加第一个“我们应该在start_times输出整行:“ 07:00”

我正在使用的当前awk返回如下内容:

somejob;;;;user1;gx,wx;1;;1st_bus_dom;";;

我想要这个

somejob;;;;user1;gx,wx;1;;1st_bus_dom;"7:00";;
weiby 回答:我刚接触awk,正在尝试解析/透视由SAS或Excel使用的JIL

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3163697.html

大家都在问