2014-08-25 2 views
0

У меня есть файл с отметками времени в формате 10:24:23 то, что я пытаюсь сделать, это разделить эти временные метки, но удалять новые строковые символы после раскола. Желаемый результат я хочу, 102423, однако, что я в настоящее время получаю: 10 \ n24 \ n23 \ пудаление символа новой строки после команды split

это сценарий я бегу:


#!/usr/bin/perl 
use warnings; 
use strict; 

my $cmd = `cat test.txt |awk {'print \$2')`; 
my @array = $cmd; 

my @values = split(':', $cmd); 
print @values; 

for (@values) { 
    chomp $_; 
    if ($_ == 102423) { 
     print "Hello\n"; 
    } 
} 

когда Я распечатываю массив @values, я вижу то, что хочу, '102423' Однако, когда я пытаюсь сравнить if, я получаю сообщение об ошибке, указывающее, что моя переменная не является числовой. Ошибка показывает следующее: «10 \ n24 \ n23 не является числовым»

спасибо, что нашли время Cheers.

ответ

2

В вашем коде вы получаете все временные метки, а затем разделяете их на двоеточия, что создает недопустимые значения: секунды + новая строка + часы следующей отметки времени.

Обработать файл по строкам. Не нужно звонить awk из Perl. Откройте файл и используйте (split)[1], чтобы получить второй столбец (и удалить конечную новую строку).

#!/usr/bin/perl 
use warnings; 
use strict; 

open my $IN, '<', 'test.txt' or die $!; # Open the file. 
while (<$IN>) {       # Process it line by line. 
    my $timestamp = (split)[1];   # Get the second column. 
    $timestamp =~ tr/://d;    # Remove colons. 
    if (102423 == $timestamp) { 
     print "Hello\n"; 
    } 
} 
+0

большое спасибо! который решил мою проблему :) – user3821215

+0

теперь мне нужно сравнить первые две метки времени в массиве, чтобы узнать, сколько секунд прошло между двумя строками журнала. пример: линии одного из массива: 102423 линии два массива: 102425 для (@array) { , если ($ _ + 5 <= линии два из массива) { печати "AHHH BruteForce" } } Я не ожидаю, что меня помажут ложкой. Я в порядке с чтением себя, но некоторые рекомендации будут оценены, поскольку я новичок в perl. c – user3821215

+0

@ user3821215: Это усложняет ситуацию. Вы должны начать новый вопрос. – choroba

Смежные вопросы