Трудное время со сценариями в OpenVMS - PullRequest
0 голосов
/ 18 октября 2011

Мне очень трудно работать со скриптами в OpenVMS. У меня есть определенный вывод в файле с именем test.txt. Например:

[WWEWE@http-lx-as code]$ cat test.txt
** Configuration for file "MULTINET:NETWORK_DEVICES.CONFIGURATION" **

Device                           Adapter   CSR Address  Flags/Vector

------                           -------   -----------  ------------

se0  (Shared VAX/VMS Ethernet)   -NONE-    -NONE-       -NONE-

s10  (Serial Line IP)            -NONE-    -NONE-       -NONE-

dn0  (IP over DECNet link)       -NONE-    -NONE-       -NONE-

Я написал скрипт в Linux, который помогает выбиратьвверх всю информацию в столбце устройства в этом случае se0, s10, dn0.Можем ли мы сделать аналогичную вещь в OPEN VMS

Сценарий Linux выглядит следующим образом: SCRIPT:

for i in `cat test.txt 2>/dev/null |egrep '^[a-z]' |grep -v '\*\*' | awk '{print $1}'`
> do
>     echo Begin-interface: $i
> done

OUTPUT:

Begin-interface: se0
Begin-interface: s10
Begin-interface: dn0

Дайте мне знать, если это возможнобыть достигнутым, Заранее благодарю

Ответы [ 2 ]

2 голосов
/ 18 октября 2011

Предполагая, что вам нужно что-нибудь в первом столбце ниже строки, начинающейся с '-' Вы можете попробовать следующее в командном файле, например, extract_if.com

$    IF P1 .EQS. "" THEN GOTO nothing_specified
$    IF F$SEARCH( P1 ) .EQS. "" THEN GOTO file_not_found
$    parse_line = 0
$    OPEN/READ/ERROR=file_open_error infile 'P1'
$read_loop:
$    READ/ERROR=file_read_error/END_OF_FILE=end_of_file infile inline
$    IF F$LENGTH( F$EDIT( inline, "TRIM" ) ) .EQ. 0 THEN GOTO read_loop
$    IF parse_line .EQ. 1
$    THEN
$        interface = F$ELEMENT( 0, " ", F$EDIT( inline, "TRIM,COMPRESS" ) )
$        WRITE SYS$OUTPUT F$FAO( "Begin-interface: !AS", interface )
$    ELSE
$        parse_line = ( F$EXTRACT( 0,1,inline ) .EQS. "-" )
$    ENDIF
$    GOTO read_loop
$nothing_specified:
$    WRITE SYS$OUTPUT "No file specified"
$    GOTO finished
$file_not_found:
$    WRITE SYS$OUTPUT F$FAO( "File !AS not found", P1 )
$    GOTO finished
$file_open_error:
$    WRITE SYS$OUTPUT F$FAO( "Error opening file !AS", P1 )
$    GOTO finished
$file_read_error:
$    WRITE SYS$OUTPUT F$FAO( "Error reading from file !AS", P1 )
$    GOTO close_file
$end_of_file:
$close_file:
$    IF F$TRNLNM("infile").NES."" THEN CLOSE infile
$finished:
$    EXIT

Запустите этот скрипт, используя:

$ @extract_if test.txt

Вывод должен быть таким, как указано.

Кажется, вы знакомы с AWK. Вы также можете установить GAWK для OpenVMS.

1 голос
/ 17 июля 2013

с опозданием на два года ....

$ gawk/comm="/^[a-z]/{print ""Begin-interface:"",$1}" test.tmp
Begin-interface: se0
Begin-interface: s10
Begin-interface: dn0

Полагаю, я никогда не пойму тех сценариев Unix-скриптов, которые думают, что им нужны 4 или 5 пипетированных команд, затем подходящий инструмент и все делают за один шаг.

Передача вывода 'cat' в awk или perl является наиболее очевидным и неприятным признаком невежества. Ну что ж ... Вперед! Хайн.

...