У меня есть огромная куча файлов журналов, постоянно обновляемых на сервере HP-UX. Я создал код Perl, чтобы узнать имя файла журнала, в котором строка i ' м, находящийся внутри. Perl получает имя файла, используя разделение и передает его в variable.Using в UserInput я создать начало и остановку строки как два variables.Such как:Использовать awk в Perl, чтобы разобрать все между двумя строками
my $ssh = Net::OpenSSH->new($host, user => $user,
master_opts => [ -o => 'NumberOfPasswordPrompts=1',
-o => 'PreferredAuthentications=keyboard-interactive,password'],
login_handler => \&login_handler);
$ssh-> error and die "Unable to connect" . $ssh->error;
my $output=$ssh->capture("grep .$userinput1. /app/bea/user_projects/domains/granite/om_ni.log*");
my $array = (split ":", $output)[0];
print "$array"."\n";
[EDIT]: В соответствии с просьбой, вы, ребята, выше начало как $ массива получил заполненный in.Below, где начинается последовательность AWK:
my $a= "INFO - $userinput1";print $a;
my $b= "INFO - ProcessNode terminated... [$userinput1]";print $b;
Использование AWK, как часть команды захвата SSH, она будет искать через весь лог-файл и захватить каждую линию между string $ a и string $ b, затем получить все внутри другого массива. Такие как:
my $output2=$ssh->capture("awk -v i=$array '$a,$b' i");
Здесь $ array - это то, где полный путь файла журнала хранится, и он работает полностью как передающая переменная. Я пробовал использовать awk без параметра -v, не имеет значения.
[EDIT 2]: это результат печати «$ array». "\ N";
/app/bea/user_projects/domains/granite/om_ni.log.2
Когда я запускаю сценарий Perl, я получаю результат:
INFO - 28B26AD1-E959-4F5F-BD89-A7A6E601BE18INFO - ProcessNode terminated... [28B26AD1-E959-4F5F-BD89-A7A6E601BE18] syntax error The source line is 1.
The error context is
INFO - 28B26AD1-E959-4F5F-BD89-A7A6E601BE18,INFO - ProcessNode >>> terminated. <<< .. [28B26AD1-E959-4F5F-BD89-A7A6E601BE18]
awk: Quitting
The source line is 1.
Ошибка указывает на слово «прекратить» так или иначе, но даже когда я использую управляющие символы во всем струнам, он просто Безразлично Не волнуйся и возвращай ту же ошибку.
Любая помощь по этому вопросу высоко ценится. Спасибо заранее.
Было бы неплохо увидеть полный код. Вы выполняете '$ ssh-> login' перед' capture'? –
Мы не видим всю вашу команду, потому что вы не показали нам, что такое '$ array'. Предложение: добавьте это в свой скрипт 'print 'awk -v i = $ array' $ a, $ b 'i" 'и посмотрите, как выглядит команда, которую вы пытаетесь запустить. Это может сделать ошибку очевидной. Но если нет, пожалуйста, обновите вопрос, чтобы включить точную команду, которую вы выполняете (вывод инструкции печати). – 2013-04-26 09:38:55
@DmitryMina, это ошибка Awk, поэтому кажется, что соединение SSH работает. – 2013-04-26 10:48:51