Вы можете отредактировать их в исходном коде, где они определены , и пересобрать пакет:
Теоретически, evince должен читать файл ускорений в время инициализации и объединяться с теми, которые у него есть, поэтому вы также можете изменить файл ускорений в ~/.config/evince/accels. Имейте в виду, что он перезаписывается, если есть синтаксические ошибки.
Используйте join
, если хотите, чтобы это было как можно проще;
join -1 2 -2 1 -o 2.2 1.1 2.1 <(sort -unk2,2 file1) <(sort -unk1,1 file2) 2>/dev/null
join
во втором поле первого файла -1 2
с первым полем второго файла -2 1
в качестве ключей.
и -o
выводят эти поля:
второе поле из второго файла2.2
первое поле из первого файла1.1
и первое поле из второго файла2.1
это сортирует первый файл по второму полю как ключ численноsort -unk2,2 file1
и это сортирует второй файл по первому полю как ключ в числовом виде sort -unk1,1 file2
и удалите дубликаты -u
из обоих файлов.
awk решение:
awk '!second_file{ Ids[$2]=$1; next }
($1 in Ids) { print $2, Ids[$1], $1 }' file1 second_file=1 <(sort -u file2)
Причина, по которой печатается неполная строка, заключается в том, что в вашем коде вы не удаляете значения, которые хотите удалить из массива, а заменяете их значения пустыми строками.
Это приводит к тому, что проверка $1 in id2id{ ... }
оценивается как true
для значений, являющихся пустыми строками.
Решение состоит в том, чтобы заменить код id2id[$1]=""
на delete id2id[$1]
, после чего все должно работать как положено.
Вот немного упрощенная версия кода:
awk 'NR == FNR { a[$2] = $1; next }
$1 in a { print a[$1], $2, $1; delete a[$1] }' file1.txt file2.txt
В один -вкладыш:
awk 'NR==FNR{a[$2]=$1;next} $1 in a{print a[$1],$2,$1; delete a[$1]}' file1.txt file2.txt
Преимущество использования awk вместо join заключается в простоте и легкости настройки.
Недостатком является то, что перед слиянием первый файл сохраняется в ОЗУ, поэтому он не будет эффективно обрабатывать большие файлы.