напечатать совпадающие строки из файлов file1 и file2

is it possible to "update" my system in the sense of making new packages (or new versions of existing packages) available, but without actually upgrading anything, and in particular without upgrading everything all at once?

Теоретически это возможно, но это намного сложнее, чем обновление дистрибутива в целом. И вопреки тому, что вы думаете, это более рискованно.

Пакеты много взаимодействуют друг с другом и имеют зависимости друг от друга. В частности, программы вызывают библиотеки. К моменту выхода новой версии многие программы перешли на более новую версию множества библиотек. И сами библиотеки зависят от других библиотек, что может привести к перемещению многих пакетов.

Кто решает использовать более новую версию библиотеки? Иногда автор программы использует библиотеку, потому что ему нужны новые возможности. Иногда дистрибутив делает это для того, чтобы все программы, использующие библиотеку, использовали одну и ту же версию библиотеки.

Смешивание пакетов из разных выпусков часто не работает из-за несовместимости версий библиотек. Даже если установка завершится успешно, вы будете использовать комбинацию версий, которая не была протестирована так тщательно, как комбинация в официальном выпуске. Вот почему частичное обновление более рискованно.

Вы можете продолжать использовать старую версию столько, сколько хотите, хотя некоторые аспекты могут устареть (, в частности, очень плохая идея запускать систему, на которую не устанавливаются обновления безопасности ). Но тогда вы не сможете запускать более новые версии программы.

Если вы все равно хотите продолжать использовать старый выпуск и хотите иметь возможность устанавливать пакеты из этого выпуска, вам может потребоваться отредактировать список источников пакетов(/etc/apt/sources.listили файлы в/etc/apt/sources.list.d). Ubuntu архивирует свои старые выпуски наhttp://old-releases.ubuntu.com/. Вы можете получить пакеты Ubuntu оттуда. Я не знаю, есть ли аналогичный сайт для конкретных пакетов Mint -.

1
24.10.2019, 22:58
2 ответа

Использование awkс двумя разделителями полей ввода >и символом пробела:

awk -F'[> ]' '{
  if (NR==FNR){
    a[$1]
  }
  else {
    if (substr($0,0,1) == ">"){
      printline=($2 in a)
    }
    if (printline){
      print
    }
  }
}' file1.txt file2.txt

После обработки первого файла сохранить первое поле в массиве.
Когда обрабатывается второй файл, проверьте, начинается ли текущая строка с >, и установите флаг printline, проверяющий наличие второго поля в массиве. Вывести текущую строку, если флаг установлен.

1
27.01.2020, 23:22

В моих тестах это работает нормально. Хитрость заключается в использовании «>» в ​​качестве разделителя записей/блоков.

awk 'NR==FNR{a[$0];next};$1 in a{print ">" $0}' file1.txt RS=">" file2.txt
#or alternativelly, due to the whitespace present in the end of each line of file1.txt
awk 'NR==FNR{a[$1];next};$1 in a{print ">" $0}' file1.txt RS=">" file2.txt

Позиция RSв конце awk влияет на файл, следующий за RS. В моей команде file1анализируется с RS="\n"по умолчанию, но file2анализируется с RS=">".

2
27.01.2020, 23:22

Теги

Похожие вопросы