2013-10-03 9 views
0

Предположим у меня есть имя файла Trialcr.txtУдаление первые четыре строки в файле в OpenVMS ---> Dcl сценариев

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

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

Кто может предложить некоторым образом

+1

Так бы, что более точно описано, как сохранить все, кроме первых четырех строк, или сохранить все линии с abc.com или pq.com? И whet вы пробовали, и что вы подразумеваете под динамическим –

+0

Знаете ли вы, что ищете в файле? Возможно, имеет смысл использовать 'SEARCH'. – HABO

ответ

0
$ 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 
0

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

, который выглядит как выход на CMS ШОУ КЛАССА/СОДЕРЖАНИЯ для класса FXO_CR012123. Учитывая расположение для вывода такой команды (четыре заготовок перед именем элемента) в вашем примере простого

$ search Trialcr.txt " " 

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

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

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

2

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

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

Ищите известную там строку в соответствии с пользователем2116290. С ПОСЛЕДНИМИ версиями 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 

Наслаждайтесь, Hein