仅获取记录 nr。 x 通过在 JCL 中使用 dfsort

Posted

技术标签:

【中文标题】仅获取记录 nr。 x 通过在 JCL 中使用 dfsort【英文标题】:Get only record nr. x by using dfsort in JCL 【发布时间】:2015-07-13 09:29:18 【问题描述】:

我有一个包含多行数据的数据集,我必须对其中一些行做一些事情(不是全部,并且没有逻辑可以将它们挑选出来),我有一个行号列表被选中,而且列表太大,无法手动复制它们。

那么有谁知道一个 dfsort 命令,例如可以从这些数据中获取记录:

parameter10000500006
parameter20000100002
parameter30000400007
parameter40000000006
parameter50000100001
parameter60000500012
parameter70000700013

并且只会返回第二个和第三个,例如:

parameter20000100002
parameter30000400007

【问题讨论】:

我发现了类似 startrec 和 endrec 但不知道如何使用它 【参考方案1】:

如果您想一次执行此操作,最好使用 OPTION SKIPREC=1,STOPAFT=2:

 OPTION SKIPREC=1,STOPAFT=2,COPY

在您的回答中,您只需显示一个简单的 OUTFIL 语句,从第一列开始。所有 SORT 语句必须在第一列之后开始。必须始终存在显式或隐式 SORT、MERGE 或 COPY 操作,否则您的步骤将失败。

可以将 COPY 操作指定为 OPTION COPYSORT FIELDS=COPYMERGE FIELDS=COPY

最好在 OPTION 语句中执行此操作的原因是数据会尽早删除/包含。

例如,如果您有一个 SORT(非复制)操作,那么您的 OUTFIL 解决方案仍然可以工作,但您会在最终排除之前对整个文件进行排序。

当 SKIPREC 和 STOPAFT 不能用于您的任务时,通常会看到 STARTREC 和 ENDREC,因为发生了 SORT 或 MERGE(因此您不知道哪个将是新数据中的第一条记录)。

在大型机数据集上,我们没有“行”数据,我们有记录。如果您查阅有关如何处理“行”的文档,您会感到困惑,因为在 DB2 之外,该术语至多没有任何意义,或者在最坏的情况下也没有您认为的含义。

【讨论】:

是的,你是对的,在那之前我有一个排序步骤,我会编辑我的答案 @JeremyC 你想同时为多个选择执行此操作吗? 这不是必需的,我们有一个可以多次运行此 jcl 的 rexx 脚本,它只需要随着时间的推移(我们有几个星期)一次完成会花费太长时间,我们会午餐时间每天大约 10 次,此时系统不太忙 我想知道你是否可以看看这个问题:***.com/questions/31381336/… 你似乎是现在(即在线)唯一了解 dfsort 的人,也许你可以帮助我用这个【参考方案2】:

想通了,显然您需要将输出文件与 STARTREC 和 ENDREC 结合使用,所以现在我可以为我需要的每条记录创建一堆输出文件。

对于记录 2 和 3,它可能看起来有点像这样:

//SYSIN DD *
 SORT FIELDS=(1,1,CH,A)
 OUTFIL STARTREC=2,ENDREC=3
/*

【讨论】:

所以你想要第二个和第三个记录被排序后?请在你的问题中说清楚好吗?

以上是关于仅获取记录 nr。 x 通过在 JCL 中使用 dfsort的主要内容,如果未能解决你的问题,请参考以下文章

使用 JCL 排序删除特定记录类型的重复项

JCL 在一行中合并记录

如何通过 Java Web 应用在 IBM z OS 中提交 JCL?

如何通过 jcl 获取当前的 GDG 版本

如何在 JCL 中引用最新的物理顺序 (PS) 文件

如何仅将输入文件的选定列复制到jcl排序中的输出文件