在openvms中删除文件中的前四行---> Dcl脚本

时间:2013-10-03 08:32:07

标签: 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 个答案:

答案 0 :(得分:2)

我喜欢使用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

享受, 海因

答案 1 :(得分:1)

$ 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

答案 2 :(得分:0)

假设我有一个文件名Trialcr.txt

,类似于FXO_CR012123类的CMS SHOW CLASS / CONTENT的输出。给出这样一个命令输出的布局(元素名称前面的四个空格)在你的例子中简单

$ search Trialcr.txt "    "

应该打印想要的行。但是,通常,类名和描述之间可能有多达四个空格。为了安全,像

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

应该为所有类名产生预期的结果。重定向输出会将所需行(包括版本号)写入文件。