Пожалуйста, прочтите раздел Arch wiki выше.
Во-первых, вам нужно добавить хук encrypt
и lvm2
в mkinitcpio.conf, а затем запустить:
mkinitcpio -p linux
Во-вторых, нам нужно позволить grub расшифровать диск в продвижение процесса загрузки.
Ниже я процитировал детали из Arch wiki:
Чтобы разблокировать зашифрованный корневой раздел при загрузке, следующие параметры ядра должны быть установлены загрузчиком:
cryptdevice=UUID=device-UUID:lvm root=/dev/mapper/MyVol-root
The refers to the UUID of /dev/sdaX
Вот как это работает: вы будете сначала нужно расшифровать диск в параметре ядра, чтобы вы могли загрузиться.
Укороченная версия, в которой мы не присваиваем пустые значения нулю:
perl -lane '
++$h{$i[!$h{$F[0]} ? @i : -1]=$F[0]}{$F[1]}}{
print join "\t", "\t", @h = sort keys %{ +{ map { map { $_ => 1 } keys %$_ } values %h } };
print join "\t", $_, @{$h{$_}}{@h} for @i;
' yourfile
perl -lane '
$i[@i]=$F[0] unless $h{$F[0]};
++$h{$F[0]}{$F[1]}}{
@h = sort keys %{ +{ map { map { $_ => 1 } keys %$_ } values %h } };
print join "\t", "\t", @h;
for my $date ( @i ) {
my $href = $h{$date};
print join "\t", $date, map { $href->{$_} || 0 } @h;
}
' yourfile
A B C
2017-07-30 3 2 1
2017-07-31 1 2 2
%h
, который имеет keys
даты и значения, суб-хэши -с ключами A, B, C и т. д., а соответствующие значения являются их соответствующими подсчетами в эти конкретные даты. %h = (
2017-07-30 => {
A => 3,
B => 2,
C => 1,
},
...
);
@i
, в котором хранятся даты в порядке их появления. Мы проталкиваем даты в массив @i
только тогда, когда они не были замечены ранее IOW, когда они были замечены только в первый раз. Порядок обеспечивается позицией массива. @h
имеет уникальные ключи после суммирования всех ключей «A», «B», «C» и т. д. из хэша %h
. awkрешение:
awk '{ d[$1]; k[$2]; a[$2,$1]++ }END{
printf("%10s"," ");
for(i in k) printf("\t%s",i); print "";
for(j in d) {
printf("%-10s",j);
for(i in k) printf("\t%d",a[i,j]); print ""
} }' file
Выход:
A B C
2017-07-30 3 2 1
2017-07-31 1 2 2
Использование:./count.awk input.txt | column -t -n
#!/usr/bin/gawk -f
{
dates[$1] = $1;
events[$2] = $2;
numbers[$1][$2]++;
}
END {
num_dates=asort(dates);
num_events=asort(events);
for (i = 1; i <= num_events; i++) {
printf " %s", events[i];
}
print "";
for (i = 1; i <= num_dates; i++ ) {
printf "%s ", dates[i];
for (j = 1; j <= num_events; j++) {
printf "%s ", numbers[dates[i]][events[j]];
}
print "";
}
}
Вход(сложный для тестирования)
2017-07-30 A
2017-07-30 D
2017-07-29 D
2017-07-30 B
2017-07-28 E
2017-07-30 B
2017-07-30 A
2017-07-30 A
2017-07-30 C
2017-07-31 A
2017-07-31 B
2017-07-31 C
2017-07-31 B
2017-07-31 C
Выход
A B C D E
2017-07-28 1
2017-07-29 1
2017-07-30 3 2 1 1
2017-07-31 1 2 2
Обычная старая версия bash , использующая массивы.
#!/bin/bash
declare -A values letters dates
while read date letter; do
values[$date$letter]=$(( ${values[$date$letter]} + 1 ))
letters[$letter]=1
dates["$date"]=1
done <file.txt
echo ' ' ${!letters[@]} | sed 's/ /\t/g'
for date in ${!dates[@]}; do
printf "%-8s\t" $date
for letter in ${!letters[@]}; do
printf "%s\t" ${values[$date$letter]}
done
echo
done
Если «достаточно распространенный» включает массив данных GNU , тогда
datamash -Ws crosstab 1,2 < file
напр.
$ datamash -Ws crosstab 1,2 < file
A B C
2017-07-30 3 2 1
2017-07-31 1 2 2
(к сожалению, форматирование этого сайта не сохраняет вкладки -фактический вывод выравнивается по табуляции ).