假设我有一个文件名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
希望动态完成此操作。
任何人都可以提出建议吗
答案 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
应该为所有类名产生预期的结果。重定向输出会将所需行(包括版本号)写入文件。