apt upgrade не видит пакеты apt-offline

Перл

perl -ne 'print if $.%3==1;$var=$_ if $.%3==2;print $_. $var if $.%3==0' input.txt

Идея здесь в том, что мы используем оператор по модулю %с переменной номер строки $., чтобы выяснить, какая из них является каждой первой, какая — каждой второй, а какая — каждой третьей строкой. Для каждой 3-й строки остаток равен 0, а для каждой 1-й и 2-й строки будут соответствующие числа.

Тест:

$ cat input.txt                                                                                                          
gi_1234
My cat is blue.
I have a cat.
gi_5678
My dog is orange.
I also have a dog.

$ perl -ne 'print if $.%3==1;$var=$_ if $.%3==2;print $_. $var if $.%3==0' input.txt                                    
gi_1234
I have a cat.
My cat is blue.
gi_5678
I also have a dog.
My dog is orange.

Незначительное улучшение

Подход с сохранением второй строки в переменной имеет изъян. Что, если последняя строка является «второй», т.е. для этого номера строки остаток равен 2 ? Исходный код в моем ответе и ответе DopeGhoti не будет печатать My dog is orange, если мы опустим последнюю строку. Исправление для этого в обоих случаях заключается в использовании блока кода END{}со сбросом временной переменной после печати. Другими словами:

$ awk 'NR%3 == 1 { print } NR%3 == 2 { delay=$0 } NR%3 == 0 { print; print delay;delay=""}END{print delay}' input.txt

и

$ perl -ne '$s=$_ if $.%3==2;print $_. $s and $s="" if $.%3==0 or $.%3==1;END{print $s}' input.txt 

Таким образом, код будет работать для произвольного количества строк в файле, а не только для тех, которые делятся на 3.

Дополнительное исправление для проблемы, упомянутой в комментариях

В случае awk, если последняя строка в файле выводит 1 вместо $. % 3, в предыдущем коде возникла проблема с выводом пустой новой строки из-за безусловной печати END{print delay}, поскольку функция print, упомянутая в комментариях, всегда добавляет новую строку к любой переменной, над которой она работает. В случае версии perlэтой проблемы не возникает,поскольку с флагами -neфункция printне добавляет новую строку.

Тем не менее, исправление в случае awk состоит в том, чтобы сделать условие, как упоминал Dope Ghoti в комментариях, чтобы проверить длину временной переменной. Perl-версия того же исправления будет:

$ perl -ne '$s=$_ if $.%3==2;print $_. $s and $s="" if $.%3==0 or $.%3==1;END{print $s if length $s}' input.txt 
1
09.10.2019, 19:45
1 ответ

Я нашел решение, может быть и лучше, но мне помогло это...

Часть 1

Вместо того, чтобы выполнять:sudo apt upgradeсам по себе, вы должны использовать тег --fix-missing, и сначала он не будет работать, но затем обнаружит все пакеты, которые вы установили, используя обычный метод apt -в автономном режиме, и он будет обновлен как ожидал.

Рассказ используйте эту команду:sudo apt upgrade --fix-missing

Часть 2

Теперь, если вы пытаетесь установить пакеты/продукты/модули, такие как net-tools, например... вы делаете все то же самое, за исключением...

Не используйте :sudo apt upgrade --fix-missing, используйте:sudo apt-get install net-tools

0
28.01.2020, 00:00

Теги

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