Как использовать SORT для перемещения пустых строк в конец файла?
У меня 9787 записей, из которых первые 17 строк пустые. Я хочу переместить эти 17 строк в конец файла. Как я могу это сделать?
2 ответа
Ниже будет отсортирован входной набор данных с пустыми строками в конце DD SORTOUT
// SORT EXEC PGM = SORT
// SYSOUT DD SYSOUT = *
// SORTWK01 DD SPACE = (CYL, (10,5), RLSE)
// SORTWK02 DD SPACE = (CYL, (10,5), RLSE)
// SORTWK03 DD SPACE = (CYL, (10,5), RLSE)
// SORTIN DD DSN = INPUT.DATASET, DISP = SHR
// SORTOUT DD SYSOUT = *
// SYSIN DD *
ПОЛЕВЫЕ ПОЛЯ = (1,80, CH, D)
// *
FIELDS = (1,80, CH, D) означает, что сортировка выполняется в порядке убывания от позиции 1 для 80 символов с использованием символьных данных.
Если ваш набор данных шире, чем 80 символов, вам может потребоваться указать здесь фактическую ширину, иначе пустые строки могут не помещаться в конце.
Нет необходимости сортировать данные. К счастью, строки данных были 1) в порядке, как и во всей записи, 2) в порядке убывания:-).
Это временно расширяет каждую запись, добавляя порядковый номер в конце каждой записи (пять цифр должны допускать расширение). С OUTFIL OMIT пустые строки из первых 17 записей данных удаляются. С TRAILER1 и "оператором слэша" "/" 17 пустых строк добавляются в "конец" файла. REMOVECC вызван тем, что в нем нет управляющего символа принтера, который иначе мог бы добавить TRAILER1 (функция отчетности). BUILD on OUTFIL должен вернуть запись к ее первоначальному размеру, отбрасывая 5-значный порядковый номер.
OPTION COPY
INREC IFTHEN=(WHEN=INIT,OVERLAY=(81:SEQNUM,5,ZD))
OUTFIL OMIT=((1,80,CH,EQ,C' ',
AND,81,5,ZD,LE,17)),
BUILD=(1,80),
REMOVECC,
TRAILER1=(/,/,/,/,/,/,/,/,/,/,/,/,/,/,/,/)