0

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

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

parameter10000500006
parameter20000100002
parameter30000400007
parameter40000000006
parameter50000100001
parameter60000500012
parameter70000700013

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

parameter20000100002
parameter30000400007
4

2 回答 2

0

如果您想一次执行此操作,最好使用 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(非 COPY)操作,那么您的 OUTFIL 解决方案仍然可以工作,但您会在最终排除之前对整个文件进行排序。

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

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

于 2015-07-13T10:54:22.587 回答
0

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

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

//SYSIN DD *
 SORT FIELDS=(1,1,CH,A)
 OUTFIL STARTREC=2,ENDREC=3
/*
于 2015-07-13T09:37:03.043 回答