Эта ошибка это потому, что ваша 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
Не так просто, как кажется. Решение на 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},
}
}
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
Если некоторое объяснение необходимо, пожалуйста, задавайте в комментариях.