Удаление первых четырех строк в файле в 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
должен дать ожидаемый результат для всех имен классов. Перенаправление вывода запишет нужные строки (которые включают номера версий) в файл.