Вопрос неясен, многие детали отсутствуют, но вот что может помочь другому искателю:
//SYSIN DD *
JOINKEYS F1=INA,FIELDS=(1,5,A),SORTED,NOSEQCK
JOINKEYS F2=INB,FIELDS=(1,5,A)
JOIN UNPAIRED,F1
REFORMAT FIELDS=(F1:1,80,?)
OPTION COPY
INREC IFTHEN=(WHEN=(81,1,CH,EQ,C'B'),
OVERLAY=(82:SEQNUM,9,ZD))
OUTFIL OMIT=(82,9,CH,LE,C'000000501',
AND,
81,1,CH,EQ,C'B')
//JNF2CNTL DD *
INREC IFTHEN=(WHEN=(1,1,CH,EQ,C'0'),
BUILD=(3,5)),
IFTHEN=(WHEN=NONE,
BUILD=(2,5))
//INA DD *
11111 IN
22222 KEEP UNMATCHED
33333 OUT
66666 IN
66667 KEEP UNMATCHED
66668 KEEP UNMATCHED
77777 OUT
88888 SHAKE IT ALL ABOUT
//INB DD *
0X11111
0X66666
0X88888
133333
799999
877777
Это использует два входных файла, INA и INB.
INA уже находится в последовательности (поэтому укажите для нее SORTED,NOSEQCHK в JOINKEYS) и содержит 80-байтовые записи фиксированной длины.
INB уже не в последовательности, потому что это смесь разных файлов, все записи фиксированной длины по 80 байт.
В JNF2CNTL извлекается только ключ из второго файла, поскольку никаких других данных из этого файла не требуется. Ключ берется из разных мест в зависимости от типа записи. Файл будет отсортирован автоматически (с установленным OPTION EQUALS) перед самим JOIN.
JOIN предназначен для совпадений и непревзойденных записей из F1 (INA).
? в операторе REFORMAT является «маркером совпадения», и он будет автоматически установлен на B (оба) для совпадения и 1 (в этом случае возможен только один из-за ONLY в операторе JOIN) для несовпадающей записи из F1 .
Из тех, которые совпадают, вы хотите игнорировать первые 501. Итак, установите порядковый номер, который увеличивается только для совпадающих записей.
Затем в OUTFIL OMIT= для тех совпадающих записей, последовательность которых меньше или равна 501 счетчику.
Выводом SORTOUT будут все записи из файла INA, кроме первых 501 совпадающих.
person
Bill Woodger
schedule
10.08.2014