Я очень плохо знаком с Perl, поэтому, пожалуйста, ответьте на мой простой вопрос:
Вот пример вывода:
Most successful agents in the Emarket climate are (in order of success):
1. agent10896761 ($-8008)
2. flightsandroomsonly ($-10102)
3. agent10479475hv ($-10663)
Most successful agents in the Emarket climate are (in order of success):
1. agent10896761 ($-7142)
2. agent10479475hv ($-8982)
3. flightsandroomsonly ($-9124)
Меня интересуют только имена агентов и их соответствующие балансы, поэтому я надеюсь получить следующий вывод:
agent10896761 -8008
flightsandroomsonly -10102
agent10479475hv -10663
agent10896761 -7142
agent10479475hv -8982
flightsandroomsonly -9124
Для последующих процессов.
Это код, который я получил до сих пор:
#!/usr/bin/perl -w
open(MYINPUTFILE, $ARGV[0]);
while(<MYINPUTFILE>)
{
my($line) = $_;
chomp($line);
# regex match test
if($line =~ m/agent10479475/)
{
if($line =~ m/($-[0-9]+)/)
{
print "$1\n";
}
}
if($line =~ m/flightsandroomsonly/)
{
print "$line\n";
}
}
Второе совпадение с регулярным выражением не имеет ничего плохого, потому что оно печатает всю строку. Тем не менее, для первого совпадения с регулярным выражением у меня есть некоторые другие выходные данные, такие как:
$ ./compareResults.pl 3.txt
2. flightsandroomsonly ($-10102)
0479475
0479475
3. flightsandroomsonly ($-9124)
1. flightsandroomsonly ($-8053)
0479475
1. flightsandroomsonly ($-6126)
0479475
Если я "убегу" от таких скобок, как это
if($line =~ m/\($-[0-9]+\)/)
{
print "$1\n";
}
Тогда никогда не найдется соответствия для первого регулярного выражения ...
Так что я застрял с проблемой заставить этот конкретный регулярное выражение работать. Есть намеки на это? Большое спасибо заранее.