Вы можете восстановить свой домашний каталог или все домашние каталоги (т.е. все из / home
), / usr / local
и / root
оптом и без разбора. В остальном:
/ usr
: вообще не восстанавливайте это (кроме / usr / local
). Все содержимое управляется менеджером пакетов Debian. Просто верните файлы, переустановив те же пакеты, что и раньше. Фактически, если вы не внесли необычных изменений в свою систему, например, использовали dpkg-dirvert
для замены элементов в / usr
, вам может не понадобиться сохранять резервную копию ] / usr
вообще (но оставьте / usr / local
). / etc
: распакуйте резервную копию в промежуточное место и выберите отдельные изменения для восстановления. Вы можете сравнить старую и новую версию с чем-то вроде diff -ru
, но вы заметите много различий, которые следует игнорировать, например, системные пользователи с разными uid и разные файлы конфигурации из-за пакетов, которые были установлены ранее но не больше или наоборот. Восстанавливайте только те изменения, которые вы считаете изменениями, внесенными вами самостоятельно. / var
: очень похоже на / etc
, но немного проще. Вы можете избавиться от больших частей / var
из резервной копии, таких как / var / cache
и, возможно, / var / log
(если вам все равно о старых журналах) и полностью замените другие части, такие как / var / www
из резервной копии. Третьи, такие как / var / lib
, вы можете оставить, чтобы иметь возможность ссылаться на состояние старой системы, но не использовать их содержимое в новой системе. Короче говоря, знание того, что можно заменить, а что нельзя заменять, требует обширных знаний о том, что это за части, и никаких кратких общих советов не подойдет. Вы можете попытаться восстановить файлы амбициозно, если хотите сэкономить время, но вы должны знать, что это рискованно. Самый безопасный вариант - выбрать из резервной копии именно то, что вам нужно.
Другой вариант, конечно, - это точное восстановление всего из резервной копии вместо переустановки. Тогда вы вернетесь к системе, которая точно такая же, как и старая система, с наименьшим объемом работы.
Использованиеjoin
:
join -t, -a 1 -1 8 -2 1 file1.txt file2.txt
Использованиеawk
:
Сохраните содержимое первого файла в массиве с соответствующим индексом в качестве ключа и вызовите его при обработке второго файла:
awk -F "," '
FILENAME=="file1.txt"{row[$8]=$0}
FILENAME=="file2.txt"{OFS=","; print row[$1],$2}
' file*.txt
Для ваших новых требований:
awk -F "," '
FILENAME=="file1.txt"{row[$8]=$0}
FILENAME=="file2.txt"{row[$1]=row[$1]","$2}
END{ for (i in row) print row[i] }
' file*.txt
Обратите внимание, это изменит сортировку .
Использованиеcsvsql
:
Это также хороший вариант использования для csvsql
, особенно потому, что приведенные выше решения не будут работать, если у вас есть текстовое поле с кавычками и разделителем внутри кавычек:
csvsql -H \
--query "select file1.*, file2.b from file1 left join file2 on file1.h == file2.a" \
file*.txt
Я бы сначала перебрал меньший файл:
awk -F, -v OFS=, '
NR == FNR { weight[$1] = $2; next }
$8 in weight { $(NF+1) = weight[$8] }
1
' file2.txt file1.txt