Как извлечь слова в несколько строк в Unix? - PullRequest
1 голос
/ 14 июня 2011

Я хочу извлечь некоторые конкретные слова из следующей строки: -

Exported Layer : missing_hello  
Comment :   
Total Polygons : 20000 (reported 100).  

Я хочу извлечь слова "missing_hello" и "2000" из приведенной выше строки и хочу отобразить его как

missing_hello : 20000

Как это сделать в Unix?

Ответы [ 4 ]

1 голос
/ 15 июня 2011

Предполагая, что в каждом пропущенном слове отсутствует

1 голос
/ 14 июня 2011

Взгляните на это руководство- http://www.grymoire.com/Unix/Sed.html

Sed, безусловно, стоит изучить. Я бы специально посмотрел на разделы «Использование \ 1 для сохранения части шаблона» и «Работа с несколькими строками».

1 голос
/ 15 июня 2011

Если у вас есть Perl, вы можете использовать это:

use strict;
use warnings;

my $layer;
my $polys;

while (<>) {
    if ($_ =~ m{^Exported \s Layer \s : \s (\S+)}xms) {
        $layer = $1;
        next;
    }
    if ($_ =~ m{^Total \s Polygons \s : \s (\d+)}xms) {
        $polys = $1;
    }
    if (defined $layer && defined $polys) {
        print "$layer : $polys\n";
        $layer = $polys = undef;
    }
}
1 голос
/ 14 июня 2011

В awk:

awk -F: '/Exported Layer/ { export_layer = $2 }
         /Total Polygons/ { printf("%s : %s\n", export_layer, $2); }' "$@"

Если ввод является мусором, вывод тоже будет (GIGO). Если поля могут содержать двоеточия, жизнь становится более грязной.

В sed:

sed -n -e '/Exported Layer : *\(.*\)/{s//\1 : /;h;}' \
       -e '/Total Polygons : *\(.*\)/{s//\1/;x;G;s/\n//;p;}' "$@"

Двоеточия в полях не являются проблемой для этой sed версии.

Теперь протестировано на MacOS X 10.6.7. Оба сценария включают комментарий после числа в строке «Всего полигонов». Оба сценария могут быть легко пересмотрены, чтобы печатать только номер и игнорировать комментарий. Это помогло бы получить точное определение всех возможностей формата.

Я бы, вероятно, использовал Perl (или Python) для этой работы; разделение полей достаточно грязное, чтобы воспользоваться лучшими возможностями в этих языках.

...