Печать Perl строки, соответствующие столбцам файла 1 и file2

Необходимо проверить переменные окружения $PATH и $LD_LIBRARY_PATH. Убедитесь, что они указывают на правильность версии ffmpeg и не включают старую версию

, если LD_LIBRARY_PATH еще не настроена, тогда попробуйте следующее :

LD_LIBRARY_PATH=$LD_LIBRARY_PATH: /usr/local/lib ffmpeg

1
13.04.2017, 15:37
1 ответ

Как @choroba указал в комментариях, все, что вам нужно сделать, это удалить not . Вот немного более сложная версия:

#!/usr/bin/perl

## Add command line switches
use Getopt::Std;

## This hash will hold the options
my %opts;

## Read the options
getopts('d',\%opts);

# create names lookup table from first file
my %names;
while (<>) {
    ## Remove trailing newlines. This is needed
    ## for cases where you only have a single word
    ## per line.
    chomp;

    my $col1=split(/\s+/, $_);
    $names{$col1} = 1;
    last if eof;
}
# scan second file
while (<>) {
    ## Skip any lines we don't care about
    next unless /^(\S+)/;

    ## Do we want the duplicates or not?
    defined $opts{d} ? 
        do{print if $names{$1}} :
        do{print unless $names{$1}};
}

Если вы запустите приведенный выше сценарий с флагом -d ( foo.pl -d file ), он напечатает имена, найденные в обоих файлов и без него он будет печатать имена, найденные только в первом.

Обратите внимание, что примерно то же самое можно сделать с помощью grep . Чтобы найти дубликаты:

grep -wFf file1 file2

И для не дублированных:

grep -vwFf file1 file2

Однако приведенное выше будет соответствовать шаблонам из file1 где угодно в file2 , а не только в начало строки.

2
27.01.2020, 23:38

Теги

Похожие вопросы