Синхронизируйте столбцы двух матриц

Наконец-то решили это! Я уверен, что есть другой способ сделать это. Я сделал следующее:

  • На Ubuntu (рабочей системе):

    • synclient -l > ubuntusettings
  • Loaded Debian (проблемная система):

    • Скопировал файл ubuntusettings из системы Ubuntu в Debian.

    • Скопировал этот скрипт synclient-load в пустой текст (с расширением .py). Это написано для более ранней версии питона, так что вам понадобится питон 2.x

    • Использованный chmod +x synclient-load, чтобы сделать скрипт исполняемым.

    • Выполните команду python synclient-load.py ubuntusettings

Моя мышь теперь может перетаскивать, нажимать правую кнопку мыши, а также перетаскивать и выделять 2 пальцами. Я уверен, что мог бы просмотреть все настройки синклиента и вручную перенастроить или даже настроить файл, из которого читает синклиент (согласно man-странице, он читается из /etc/X11/xorg.conf и /etc/X11/XF86Config-4, однако ни один из них не был легко редактируемым для меня, так как их не существовало, и замена/создание файла xorg.conf ничего не сделало).

Этот скрипт вместо этого берет все из дампингованного синклиентного файла, помещает все в словарь, разбирает информацию и устанавливает настройки из этого словаря.

1
29.04.2015, 21:56
1 ответ

Это немного сложнее, чем кажется - вероятно, есть библиотека, которая сделает это лучше (в perl много математических библиотек).

Но это должно делать примерно то, что вы хотите:

#!/usr/bin/perl

use strict;
use warnings;


#read file 1
open( my $file1, "<", "data1.txt" ) or die $!;

my $header_line = <$file1>;
chomp($header_line);
my ( $column1, @headers1 ) = split( ' ', $header_line );

my %results;
my %headers_in_file1 = map { $_ => 1 } @headers1;

for (<$file1>) {
    my ( $column, @values ) = split;
    my %these_results;
    @these_results{@headers1} = @values;
    $results{$column}         = \%these_results;
}
close ( $file1);


#read file 2
open( my $file2, "<", "data2.txt" ) or die $!;
$header_line = <$file2>;
chomp($header_line);
my ( $column2, @headers2 ) = split( ' ', $header_line );

my %results2;
my %headers_in_file2 = map { $_ => 1 } @headers2;

for (<$file2>) {
    my ( $column, @values ) = split;
    my %these_results;
    @these_results{@headers2} = @values;
    $results2{$column}        = \%these_results;
}
close ( $file2 );

#figure out the columns in both
my %in_both;
foreach my $header ( @headers1, @headers2 ) {
    if (    $headers_in_file1{$header}
        and $headers_in_file2{$header} )
    {
        $in_both{$header}++;
    }
}

#sort out headers for output. 
my @output_headers = sort keys %in_both;

print join( " ", $column1, @output_headers ), "\n";
foreach my $row ( sort keys %results ) {
    print $row, " ";
    for my $header (@output_headers) {
        print $results{$row}{$header}, " ";
    }
    print "\n";
}

print "Second\n";
print join( " ", $column2, @output_headers ), "\n";
foreach my $row ( sort keys %results2 ) {
    print $row, " ";
    for my $header (@output_headers) {
        print $results2{$row}{$header}, " ";
    }
    print "\n";
}
1
27.01.2020, 23:50

Теги

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