LINUX.ORG.RU

В файле найти строку и вывести значение после определенного слова. PERL

 , , ,


0

1

Есть файл с таким набором строк. Необходимо вывести значение после SI(для DI D10) и записать его в переменную.


DI D10

ABC 545

SI 25.2 BY 11.2 ;

DI D12

RAZ 3

SI 11.2 BY 5.2 ;


print «$`» if(/DI D10/ … /BY/) нашла такую команды, которая выдает: SI 25.2

Помогите, пожалуйста.



Последнее исправление: aaabb (всего исправлений: 4)

Ответ на: комментарий от pru-mike

Уел, чертяка. Никогда не использовал перл для однострочников, поэтому такие фокусы давно забыл. Тем более, что с недавних пор перешёл на Raku.

gremlin_the_red ★★★★★
()
#!/usr/bin/perl

while (<DATA>) {
    print "$1\n" if m/SI\s(([0-9]*[.])?[0-9]+)/;
}

__DATA__
DI D10 ABC 545 SI 25.2 BY 11.2;
DI D12 RAZ 3 SI 11.2 BY 5.2;
paran0id ★★★★★
()
Ответ на: комментарий от gremlin_the_red

а raku — это же переименованный перл. или не совсем? как, например, выглядело бы решение задачи из топика на raku? если не сложно. сп.

anonymous
()
Ответ на: комментарий от anonymous

Raku — это Perl 6, с классическим перлом он имеет не так много общего, намного меньше, чем Python 2 и Python 3.

gremlin_the_red ★★★★★
()

Не знаю, как в perl, в powershell:

'DI D10 ABC 545 SI 25.2 BY 11.2' -replace '^.+SI\s(?=.+$)'
anonymous
()
Ответ на: комментарий от aaabb

Но это же некорректный скрипт, он просто выводит число после каждого SI, а не только после того, который после DI D10.

Так правильнее:

#!/usr/bin/perl

my $flag = 0;

while (<DATA>) {
    $flag = 1 if m/DI D10/;
    if ($flag and m/SI\s(([0-9]*[.])?[0-9]+)/) {
        print "$1\n";
        $flag = 0;
    }
}

__DATA__
DI D5 ABC 523 SI 23.2 BY 12.2;
DI D10 ABC 545 SI 25.2 BY 11.2;
DI D12 RAZ 3 SI 11.2 BY 5.2;

mertvoprog
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.