Удаление первых четырех строк в файле в openvms ---> Dcl-скриптинг

Предположим, у меня есть имя файла Trialcr.txt

PAR875:FXOV003506A_02> typ trialcr.txt

Classes in CMS Library DISK_FXOCMS:[fxo.CMS.LIBS.FXO_LIV.SRC]

FXO_CR012123 "FXO_CR1232 : FXOME-sfsfsfsf dasdad "
    ABC.COM 2
    PQ.BSQL 1

Я хочу удалить первые 4 строки и оставить только

ABC.com и PQ.com

Хотите, чтобы это было сделано динамически.

Может кто-нибудь предложить как-нибудь

3 ответа

Мне нравится использовать PERL или AWK для подобных задач.

$ perl -ne "print if $. > 4" TRIALCR.TXT  [ > x.x ]
$
$ gawk /com="NR>4" TRIALCR.TXT  [/output=x.x]

Поиск известной строки в соответствии с user2116290 тоже подойдет. В последних версиях OpenVMS для этого конкретного случая рассмотрите возможность поиска несоответствия в несуществующей строке и пропуска 4 строки. (Поиск "" не соответствует пустым строкам)

$ search TRIALCR.TXT;1 "@#$%" /match=nor /skip=4

У Джима есть хороший ответ в его сценарии. Есть хорошее упрощение, если вы понимаете, как работают постоянные файлы. Пусть DCL проглотит первые 4 строки, а затем скопирует остальные в целевой файл.

$ close/nolog input
$ open/read/error=error input trialcr.txt
$ read/end=error/error=error input junk
$ read/end=error/error=error input junk
$ read/end=error/error=error input junk
$ read/end=error/error=error input junk
$ COPY input trialcr.txt
$ close input
$exit:
$ exit
$error:
$ write sys$output "Unexpected error: " + f$message ($status)
$ goto exit

Наслаждайся, Хейн

$ close/nolog input
$ close/nolog temp
$ temp = f$unique () + ".tmp"
$ open/read/error=error input trialcr.txt
$ open/write/error=error temp 'temp'
$ read/end=error/error=error input junk
$ read/end=error/error=error input junk
$ read/end=error/error=error input junk
$ read/end=error/error=error input junk
$loop:
$ read/end=end_loop/error=error input record
$ write/error=error temp record
$ goto loop
$end_loop:
$ close input
$ close temp
$ rename 'temp' trialcr.txt
$ goto exit
$error:
$ write sys$output "Unexpected error: " + f$message ($status)
$ goto exit
$exit:
$ exit

Предположим, у меня есть имя файла Trialcr.txt

который выглядит как выход CMS SHOW CLASS/CONTENT для класса FXO_CR012123. Учитывая расположение для вывода такой команды (четыре пробела перед именем элемента) в вашем примере простой

$ search Trialcr.txt "    "

должен напечатать нужные строки. Однако в общем случае между именем класса и его описанием может быть до четырех пробелов. Быть в безопасности, как лайнер

$ pipe search Trialcr.txt "    " |search sys$pipe FXO_CR012123/match=nand

должен дать ожидаемый результат для всех имен классов. Перенаправление вывода запишет нужные строки (которые включают номера версий) в файл.

Другие вопросы по тегам