Один из вариантов, о котором не упоминалось, заключается в том, чтобы сохранить / загрузить ваш / раздел. Если вы регулярно обновляете ядро и сохраняете свою / загрузку на отдельном разделе размером 100-200 МБ, у вас будет много возможностей сделать это.
В большинстве случаев (настольных) систем в настоящее время нет реальной причины, по которой вы должны сохранять отдельную / загрузку. Конечно, некоторые люди не согласятся, но это скорее проблема устаревания, которая вызывает привычку создавать отдельный раздел ext2 для /boot.
#!/usr/bin/env python3
import sys
def make_id_dict(f):
d = {}
for line in open(f):
k, v = line.split()
if k in d:
d[k] += [ v ]
else:
d[k] = [ v ]
return d
filename1 = sys.argv[1]
filename2 = sys.argv[2]
dict1 = make_id_dict(filename1)
dict2 = make_id_dict(filename2)
for key in sorted(dict1):
for i, value1 in enumerate(dict1[key]):
value2 = dict2[key][i]
if value1 == value2:
result = 'match'
else:
result = 'mismatch'
print(key, value1, value2, result)
Сохранить как скрипт match-files-by-ids.py, затем вызвать:
$ python3 match-files-by-ids.py File1 File2
1 12 13 mismatch
1 13 13 match
2 15 15 match
2 16 17 mismatch
4 15 15 match
4 18 18 match
#!/usr/bin/env python3
import sys
def make_id_dict(f):
d = {}
for line in open(f):
k, v = line.split()
if k in d:
d[k] += [ v ]
else:
d[k] = [ v ]
return d
filename1 = sys.argv[1]
filename2 = sys.argv[2]
dict1 = make_id_dict(filename1)
dict2 = make_id_dict(filename2)
for key in sorted(dict1):
for i, value1 in enumerate(dict1[key]):
value2 = dict2[key][i]
if value1 == value2:
result = 'match'
else:
result = 'mismatch'
print(key, value1, value2, result)
Сохранить как скрипт match-files-by-ids.py, затем вызвать:
$ python3 match-files-by-ids.py File1 File2
1 12 13 mismatch
1 13 13 match
2 15 15 match
2 16 17 mismatch
4 15 15 match
4 18 18 match
#!/usr/bin/env python3
import sys
def make_id_dict(f):
d = {}
for line in open(f):
k, v = line.split()
if k in d:
d[k] += [ v ]
else:
d[k] = [ v ]
return d
filename1 = sys.argv[1]
filename2 = sys.argv[2]
dict1 = make_id_dict(filename1)
dict2 = make_id_dict(filename2)
for key in sorted(dict1):
for i, value1 in enumerate(dict1[key]):
value2 = dict2[key][i]
if value1 == value2:
result = 'match'
else:
result = 'mismatch'
print(key, value1, value2, result)
Сохранить как скрипт match-files-by-ids.py, затем вызвать:
$ python3 match-files-by-ids.py File1 File2
1 12 13 mismatch
1 13 13 match
2 15 15 match
2 16 17 mismatch
4 15 15 match
4 18 18 match
Если файлы:
отсортированы; и каждый из них содержит ровно ноль или два вхождения данного индекса, тогда, если мы join их, мы получим четыре «совпадения» для каждого отображаемого идентификатора, т. е.
1st IDn from File1 against 1st IDn from File2
1st IDn from File1 against 2nd IDn from File2
2nd IDn from File1 against 1st IDn from File2
2nd IDn from File1 against 2nd IDn from File2
и скоро. Необычные строки будут игнорироваться (если мы не воспользуемся опцией -a). Затем мы можем просто выбрать первую и четвертую строки из каждой группы соответствий и сравнить их соответствующие поля:
$ join File1 File2 |
awk '!((NR-1)%4 && NR%4) {$4 = $3==$2 ? "match" : "mismatch"; print}'
1 12 13 mismatch
1 13 13 match
2 15 15 match
2 16 17 mismatch
4 15 15 match
4 18 18 match
, где (NR-1)%4 равно нулю для строк 1,5,9 и т. Д., А [ f6] равно нулю для строк 4,8 и т. д., так что и инверсия верна для 1,4; 5,9 ...
Вот решение awk:
awk '
NR==FNR {
if ($1 in a)
b[$1]=$2;
else
a[$1]=$2;
next;
}
($1 in a) {
print $1, a[$1], $2, $2 == a[$1] ? "match" : "mismatch";
delete a[$1];
next;
}
($1 in b) {
print $1, b[$1], $2, $2 == b[$1] ? "match" : "mismatch";
}' File1 File2
Тестирование:
$ awk '
NR==FNR {if ($1 in a) b[$1]=$2; else a[$1]=$2; next}
($1 in a) {print $1, a[$1], $2, $2 == a[$1] ? "match" : "mismatch"; delete a[$1]; next; }
($1 in b) {print $1, b[$1], $2, $2 == b[$1] ? "match" : "mismatch";}
' File1 File2
1 12 13 mismatch
1 13 13 match
2 15 15 match
2 16 17 mismatch
4 15 15 match
4 18 18 match
Вот решение awk:
awk '
NR==FNR {
if ($1 in a)
b[$1]=$2;
else
a[$1]=$2;
next;
}
($1 in a) {
print $1, a[$1], $2, $2 == a[$1] ? "match" : "mismatch";
delete a[$1];
next;
}
($1 in b) {
print $1, b[$1], $2, $2 == b[$1] ? "match" : "mismatch";
}' File1 File2
Тестирование:
$ awk '
NR==FNR {if ($1 in a) b[$1]=$2; else a[$1]=$2; next}
($1 in a) {print $1, a[$1], $2, $2 == a[$1] ? "match" : "mismatch"; delete a[$1]; next; }
($1 in b) {print $1, b[$1], $2, $2 == b[$1] ? "match" : "mismatch";}
' File1 File2
1 12 13 mismatch
1 13 13 match
2 15 15 match
2 16 17 mismatch
4 15 15 match
4 18 18 match
Вот решение awk:
awk '
NR==FNR {
if ($1 in a)
b[$1]=$2;
else
a[$1]=$2;
next;
}
($1 in a) {
print $1, a[$1], $2, $2 == a[$1] ? "match" : "mismatch";
delete a[$1];
next;
}
($1 in b) {
print $1, b[$1], $2, $2 == b[$1] ? "match" : "mismatch";
}' File1 File2
Тестирование:
$ awk '
NR==FNR {if ($1 in a) b[$1]=$2; else a[$1]=$2; next}
($1 in a) {print $1, a[$1], $2, $2 == a[$1] ? "match" : "mismatch"; delete a[$1]; next; }
($1 in b) {print $1, b[$1], $2, $2 == b[$1] ? "match" : "mismatch";}
' File1 File2
1 12 13 mismatch
1 13 13 match
2 15 15 match
2 16 17 mismatch
4 15 15 match
4 18 18 match