Как извлечь конкретный столбец данных в Perl? - PullRequest
0 голосов
/ 26 августа 2010

У меня есть некоторые данные из вызова командной строки Unix

1  ab  45  1234
2  abc 5
4  yy  999 2
3  987 11

Я буду использовать функцию system() для вызова.

Как извлечь второй столбецданных в массив в Perl? Кроме того, размер массива должен зависеть от количества строк, которые у меня есть (это не обязательно будет 4).

Я хочу, чтобы массив имел ("ab", "abc", "yy", 987).

Ответы [ 2 ]

8 голосов
/ 26 августа 2010
use strict;
use warnings;

my $data = "1  ab  45  1234
2  abc 5
2  abc 5
2  abc 5
4  yy  999 2
3  987 11";

my @second_col = map { (split)[1] } split /\n/, $data;

Чтобы получить уникальные значения, см. perlfaq4 . Вот часть ответа, предоставленного там:

my %seen;
my @unique = grep { ! $seen{ $_ }++ } @second_col;
4 голосов
/ 26 августа 2010

Вы можете связать вызов Perl cmd-line (он же: однострочный ) с вашим сценарием Unix:

 perl -lane 'print $F[1]' data.dat

вместо data.datиспользуйте канал из инструмента командной строки

 cat data.dat | perl -lane 'print $F[1]'

Приложение :

Расширение уникальности результирующего столбца является простым:

cat data.dat | perl -lane 'print $F[1] unless $seen{$F[1]}++'

или, если вы ленивый (используете% _):

cat data.dat | perl -lane 'print unless $_{$_=$F[1]}++'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...