我有一个输入PS文件,如
aaa1111zzzz
bbb2222bbbb
ccc3333bbbb
ddd3333cccc
eee7777yyyy
我想知道此输入PS文件中存在单词“3333”的行号。输出应该类似
3
4
在这种情况下
我正在寻找能够做到这一点的JCL,我已经在网上搜索过,但没有运气。
答案 0 :(得分:4)
你似乎误解了JCL是什么。 JCL不可执行,它不查看数据,也不操纵数据。 JCL就像是一个从你到操作系统的备忘录,要求操作系统运行一些程序。 当读取JCL时,操作系统读取它并设置执行JCL中定义的任务所需的任何内容,然后将JCL丢弃,即将其写入输出假脱机。 然后,操作系统根据已提取的信息运行程序。
现在,为了您的任务,cschneid已经为您指出了一个解决方案。您将不得不操纵superc的报告,以便在发布时获取它。 或者,您可以按如下方式使用排序产品: 在阅读您的记录时,请排序为每条记录分配一个序列号。在写出记录时,要求排序只引用具有您要查找的值的记录,并仅写出这些记录的序列号。
答案 1 :(得分:2)
关于NicC的回答,我尝试过使用SORT来达到预期的效果。
//SORT EXEC PGM=SYNCSORT
//SORTIN DD *
aaa1111zzzz
bbb2222bbbb
ccc3333bbbb
ddd3333cccc
eee7777yyyy
//SORTOUT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSIN DD *
INREC FIELDS=(1:SEQNUM,3,ZD,4:1,11)
SORT FIELDS=COPY
OUTFIL FNAMES=SORTOUT,INCLUDE=(7,4,ZD,EQ,3333),OUTREC=(1:1,3)
/*
答案 2 :(得分:0)
这是一种与大多数人不同的方法,但不要忘记您实际上可以将z / OS UNIX服务实用程序用于此类任务。在您的示例中,“grep -nr pattern file”将找到与“pattern”匹配的所有行,并显示行号。
当然,当你的数据在传统的数据集中时,诀窍就是让“文件”部分正确......有时,最简单的就是这样:
cat "//'my.dataset.name'" | grep -nr pattern
要在JCL中运行它,你可以使用JCL将上面的命令作为输入放入BPXBATCH中,如下所示:
//jobname JOB ...
// EXEC PGM=BPXBATCH
//STDERR DD PATH='/tmp/mystd.err',
// PATHOPTS=(OWRONLY,OCREAT,OTRUNC),PATHMODE=SIRWXU
//STDOUT DD PATH='/tmp/mystd.out',
// PATHOPTS=(OWRONLY,OCREAT,OTRUNC),PATHMODE=SIRWXU
//STDPARM DD *
SH cat "//'my.dataset.name'" | grep -nr pattern
如果你想在其他地方使用STDOUT / STDERR(例如,SYSOUT),只需更改STDERR / STDOUT DD语句即可。
如果您已经熟悉UNIX / Linux shell命令,那么以这种方式使用UNIX服务是非常酷的...请在此处阅读详细信息:https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.bpxa400/toc.htm