Эта команда загружает пакет.deb с информацией о репозитории CUDA
dpkg
— менеджер пакетов для Debian. Опция -Я установлю ранее загруженный пакет
sudo dpkg -i cuda-repo-ubuntu1804_10.1.243-1_amd64.deb
apt-key
— утилита управления ключами APT. adv
команда передает расширенные параметры в gpg.
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
.
why do we run sudo dpkg -i for the first.deb file and sudo apt install for the second?
apt
— интерфейс для dpkg. Он может разрешать зависимости, загружать и устанавливать необходимый пакет. Вероятно, у первого файла.deb нет зависимостей, а у второго — нет.
why we don't add a key from the second repo, but only from the first one
Поскольку у них один и тот же открытый ключ
Нет awk
,но используя Миллера , учитывая
$ cat file
Cycle A1 A2 B1
1 4 5 2
2 7 3 4
3 3 2 5
, затем
$ mlr --pprint --ifs tab reshape -i A1,A2,B1 -o Well,Value then sort -f Well then reorder -f Well file
Well Cycle Value
A1 1 4
A1 2 7
A1 3 3
A2 1 5
A2 2 3
A2 3 2
B1 1 2
B1 2 4
B1 3 5
Вы можете пропустить шаг sort
, если он не является обязательным.
Команда Miller reshape
также может принимать регулярное выражение для выбора поля, например.
reshape -r '[A-Z][1-9]' -o Well,Value
Вот один (довольно грубый )подход, который требует, чтобы заголовки были статическими и известными заранее, и который плохо сортируется:
$ awk -F'\t' -v OFS="\t" 'BEGIN{print "Well","Cycle","Value"}
NR>1{
cycle[NR]=$2;
a1[NR]=$3;
a2[NR]=$4;
b1[NR]=$5;
}
END{
for(line in cycle){
print "A1",cycle[line],a1[line];
print "A2",cycle[line],a2[line];
print "B1",cycle[line],b1[line]
}
}' file
Well Cycle Value
A1 1 4
A2 1 5
B1 1 2
A1 2 7
A2 2 3
B1 2 4
A1 3 3
A2 3 2
B1 3 5
Если вам нужно хорошо отсортировать, вы можете использовать еще более грубый:
$ awk -F'\t' -vOFS="\t" 'BEGIN{print "Well","Cycle","Value"}
NR>1{
cycle[NR]=$2;
a1[NR]=$3;
a2[NR]=$4;
b1[NR]=$5;
}
END{
for(line in cycle){
print "A1",cycle[line],a1[line];
}
for(line in cycle){
print "A2",cycle[line],a2[line];
}
for(line in cycle){
print "B1",cycle[line],b1[line]
}
}' file
Well Cycle Value
A1 1 4
A1 2 7
A1 3 3
A2 1 5
A2 2 3
A2 3 2
B1 1 2
B1 2 4
B1 3 5
Сначала мы загружаем файл в массив массивов AoA[colidx, rowidx]
Затем в конце файлового блока мы реструктурируем эти данные в желаемом формате.
Примечание:
\t+
для обхода последовательных вкладок и не передачи пустых полей. gsub()
предназначена для удаления первых n конечных вкладок. awk -F '\t+' '
gsub(/^\t|\t$/, "") {$1=$1}
NR==1 {header = "Well" OFS $1 OFS "Value"}
{
for(i=1; i<=NF; i++) {
AoA[i, NR] = $(i)
}
}
END {
print header
for(col=2; col<=NF; col++) {
for(row=2; row<=NR; row++) {
well = AoA[col, 1]
cycle = AoA[1, row]
value = AoA[col, row]
print well, cycle, value
}
}
}
' OFS='\t' - | column -t
Результаты:
Well Cycle Value
A1 1 4
A1 2 7
A1 3 3
A2 1 5
A2 2 3
A2 3 2
B1 1 2
B1 2 4
B1 3 5