1

我有一个包含一些记录的文件,我只想将第一条和最后 10 条记录复制到另一个文件中。

任何人都可以告诉如何编写 jcl,使用 sort、icetool 等。

4

2 回答 2

1

您可以使用 ICETOOL 复制输入文件的子集。

这是将前 10 条记录和后 10 条记录复制到另一个文件中的 JCL。我假设每个 80 字节的固定长度记录。

您还必须更改 JOB 卡以适应您的大型机车间的要求。

//EXAMP    JOB A400,PROGRAMMER
//STEP1    EXEC PGM=ICETOOL
//SYSOUT   DD SYSOUT=*
//SORTIN   DD DSN=INPUT,DISP=SHR
//T1       DD DSN=&&T1,DISP=(,PASS),UNIT=VIO 
//T2       DD DSN=&&T2,DISP=(,PASS),UNIT=VIO 
//T3       DD DSN=&&T3,DISP=(,PASS),UNIT=VIO
//SORTOUT  DD DSN=OUTPUT,DISP=(NEW,CATLG),UNIT=SYSDA,
//            SPACE=(CYL,(5,1))
//SYSIN    DD * 
  COPY FROM(IN) USING(CTL1)                                     
  COPY FROM(T1) USING(CTL2)                                     
  COPY FROM(T1) USING(CTL3)
  COPY FROM(T2,T3) USING(CTL4)
/* 
//CTL1CNTL DD *
  OUTFIL FNAMES=T1,OUTREC=(1,80,SEQNUM,8,ZD)
/*
//CTL2CNTL DD *
  OUTFIL FNAMES=T2,ENDREC=10
/*
//CTL3CNTL DD *
  SORT FIELDS=(81,8,BI,D)                                       
  OUTFIL FNAMES=T3,ENDREC=10 
/*
//CTL4CNTL DD *
  SORT FIELDS=(81,8,BI,A)                                       
  OUTFIL FNAMES=SORTOUT,OUTREC=(1,80)
//

第一组控制卡 ( CTL1CNTL) 将序列号添加到输入记录。

第二组控制卡 ( CTL2CNTL) 获取前 10 条输入记录。

第三组控制卡 ( CTL3CNTL) 以相反的顺序对输入记录进行排序,并获取前 10 条(也就是后 10 条)记录。

第四组控制卡(CTL4CNTL)按正确顺序对提取的记录进行排序,并删除第一组控制卡添加的序列号。

以下是 IBM 的DFSORT 应用程序编程指南以获取更多信息。

于 2010-06-15T15:20:06.453 回答
0

从 2008 年 7 月开始,ICETOOL 有了 SUBSET。

//STEP1    EXEC PGM=ICETOOL
//SYSOUT   DD SYSOUT=*
//IN       DD DSN=your input
//OUT      DD DSN=your output
//SYSIN    DD * 
  SUBSET FROM(IN) TO(OUT) KEEP INPUT FIRST(10) LAST(10)

要知道您是否有 2008 年 7 月可用,请查看任何排序步骤中的 ICE201I 消息。

ICE201I F RECORD TYPE ...

紧随消息编号后的字母为 F 或更大,则包含 2008 年 7 月。

于 2013-04-08T22:06:27.513 回答