сравнивать и сопоставлять несколько файлов по шаблону

Мне нужна помощь с этими текстовыми файлами. (поля разделяются запятыми)


$ cat File1.seed 389,0, 390,1, 391,0, 392,0, 393,0,SEED 394,0, 395,1, 

 $ cat File2.seed 223,0, 224,1, 225,0, 226,1, 227,0,SEED 228,1, 

 $ cat File3.seed 55,0, 56,0,SEED 57,1, 58,0, 59,1, 60,0, 

и желаемым выходом будет:

  • Задавать групповые разрешения как разрешения владельца
  • Как часто создается резервный файл / etc / shadow?
  • Является ли таблица файлов в файловой системе или в памяти?
  • Копирование родительского каталога в подкаталог без бесконечной петли
  • как я могу изменить разрешения для всех подкаталогов, кроме 1 папки, используя одну команду find?
  • Сравните два файла по строкам без комм (мне нужно поддерживать порядок файла 1)

  •  389,0,,223,0,,,,,0 390,1,,224,1,,,,,2 391,0,,225,0,,,,,0 392,0,,226,1,,55,0,,1 393,0,SEED,227,0,SEED,56,0,SEED,0 394,0,,228,1,,57,1,,2 395,1,,,,,58,0,,1 ,,,,,,59,1,,1 ,,,,,,60,0,,0 

    Как вы можете видеть, файлы выравниваются по шаблону «SEED», а затем суммируют все 2-го столбца файлов по горизонтали, добавляя результат в последний столбец.

  • удаление массовой информации
  • Сжатие tar-файла без извлечения содержимого
  • Что вы называете supervisord и php-fpm et. и др. config format?
  • Как узнать, сколько строк содержит текстовый файл, не просматривая его?
  • Сжатие изображения
  • Невозможно выполнить запись в / dev / console через узел не в / dev
  • One Solution collect form web for “сравнивать и сопоставлять несколько файлов по шаблону”

    Это рабочее решение с использованием perl:

    Создайте файл, например, mergeseeds.pl:

     #!/bin/env perl use List::Util qw[min max]; use Data::Dumper; use constant COLUMNS=>3; use constant SUM_COL=>2; sub readfile($) { my $f=shift; my @lines = `cat $f`; chomp @lines; return \@lines; } sub findseed($) { my $arr = shift; my $line = 0; for(@$arr) { return $line if(/SEED/); $line++; } return $line; } sub process($$$) { my ($colnum,$numfiles,$line)=@_; my $sum = 0; my @nums = (split(/,/,$line.",END")); while($colnum < scalar @nums-1) { $sum += $nums[$colnum-1]; $colnum+=COLUMNS; } print $line.",".$sum."\n"; } sub popvalue($;@) { my ($arr,@filler)=@_; return @$arr ? (shift @$arr) : (@filler); } sub pad_array($$$) { my ($arr,$pad,$filler)=@_; while ($pad--) { unshift @$arr, $filler; } } sub pad_arrays($$) { my ($files,$pads)=@_; for(@{$files}) { pad_array($_,shift @$pads,",,"); } } sub merge_files(@) { my @files=@_; my $numfiles = scalar @files; my @seedsfound = map { findseed($_); } @files; my $maxseed = max(@seedsfound); my @padcounts = map { ($maxseed - $_); } @seedsfound; pad_arrays(\@files,\@padcounts); my $maxlines = max( map { scalar @$_; } @files); my $line= 0; while($line < $maxlines) { my @items = map {popvalue($_,",,"); } (@files); process(SUM_COL,$numfiles,join(",",@items)); $line++; } } sub read_files(@) { my @filenames=@_; my @files = map { readfile($_); } @filenames; return @files; } sub usage($) { my ($msg)=(@_); print STDERR "usage: $0 ≤Filename>...\n"; print STDERR $msg."\n"; exit 1; } sub main(@) { my @fnames=(); for my $f (@_) { if(! -f $f) { usage( "ERROR: not a file:$f\n"); } push(@fnames,$f); } merge_files(read_files(@fnames)); } main(@ARGV); 

    Затем вызовите из командной строки:

     perl mergeseeds.py File*.seed 
    Linux и Unix - лучшая ОС в мире.