Группировка данных и присвоение алфавита и числовых значений для новых категорий

Эта ошибка это потому, что ваша SDA является EXT4, и вы пытаетесь в Ext3

-121--55996-

CAT не использует какое-либо существенное время процессора (если, возможно, дешифрование или деклассы или декомпрессия на диск не участвуют и не учитываются в процессе , которое является одним чтением с диска) или памяти. Это просто читает содержимое файлов и записывает его в трубу в небольших кусках в петле.

Однако здесь вам это не нужно. Вы можете просто сделать:

gzip -c file1 file2 file3 file4 > compress.gz

(не то, что он будет иметь существенное значение).

Вы можете снизить приоритет процесса GZIP (планирование CPU WRT) с помощью команды Carl . Некоторые системы имеют команду Ionice для того же с помощью I / O.

nice -n 19 ionice -c idle pigz -c file1 file2 file3 file4 > compress.gz

На Linux будет запустить параллельную версию GZIP с максимально возможным влияния на систему.

Наличие Compress.gz на другом диске (при использовании вращательного хранения) сделает его более эффективным.

Система может кэлить, что данные, которые CAT или GZIP / PIGZ читается в памяти, если она имеет доступную память для этого. Это в случае, если вам нужно снова эти данные. В процессе это может выселить другие кэшированные данные, которые более полезны. Здесь эти данные, вероятно, не должны быть доступны.

с GNU DD , вы можете использовать IFLAG = NOCACHE , чтобы посоветовать систему, чтобы не кэшировать данные:

for file in file1 file2 file3 file4; do
  ionice -c idle dd bs=128k status=none iflag=nocache < "$file"
done | nice pigz > compress.gz
0
31.10.2014, 23:13
2 ответа

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

#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };

my (%collapsed, %groups);

<>;  # Skip header.
while (<>) {
    my ($line, $group, $name, $value) = split;
    push @{ $collapsed{$line}{$group}{names}  }, $name;
    push @{ $collapsed{$line}{$group}{values} }, $value;
    undef $groups{$group};
}

for my $group (sort keys %groups) {
    for my $line (sort keys %collapsed) {
        next unless $collapsed{$line}{$group};
        my $value = join q(), @{ $collapsed{$line}{$group}{values} };
        $groups{$group}{$value} ||= keys %{ $groups{$group} };
    }
}

for my $group (sort keys %groups) {
    for my $line (sort keys %collapsed) {
        next unless $collapsed{$line}{$group};
        my $value = join q(), @{ $collapsed{$line}{$group}{values} };
        say join "\t", $line, $group,
            join(' ', @{ $collapsed{$line}{$group}{names}  }),
            join(' ', @{ $collapsed{$line}{$group}{values} }),
            chr $groups{$group}{$value} - 1 + ord 'A',
            $groups{$group}{$value},
    }
}
1
28.01.2020, 02:36

AWK Решения (многие ассоциативные массивы), но:

#!/usr/bin/awk

BEGIN {
SUBSEP=" "
split("A1^B2^C3^D4^E5",c,"^")
}

NR != 1 {
L[$1]=1
G[$2]=1
a[$1,$2]=a[$1,$2]" "$3
b[$1,$2]=b[$1,$2]" "$4
}

END {
for (g in G)
  {
  i=1
  for (l in L)
    {
    idx=b[l,g]
    if(d[idx]=="")
      d[idx]=c[i++]
    }
  } 
for (k in a)
  print k a[k] b[k],d[b[k]]
}

и сделать вышеуказанный скрипт:

awk -f script.awk tab.data | sort -k2,2 -k1,1

Если некоторое объяснение необходимо, пожалуйста, задавайте в комментариях.

1
28.01.2020, 02:36

Теги

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