Как использовать 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=(/,/,/,/,/,/,/,/,/,/,/,/,/,/,/,/)
Другие вопросы по тегам