Сохраните AWK FNR как переменная Bash для продолжения поиска от строки

Многие пакеты, от которых зависит Synaptic, не установлены на вашей системе. Для начала вам необходимо установить эти пакеты. Однако, установка Synaptic не поможет решить проблему с прокси. Сначала нужно решить эту проблему, потому что установка пакетов вручную - это боль (вот почему существуют пакетные менеджеры).

Убедитесь, что вы прочитали доступные ресурсы о том, как заставить APT работать с прокси, требующим аутентификации, начиная с Как настроить аутентификацию прокси для работы с Ubuntu Software Center? Если вы не можете заставить прокси работать, то:

  • Если возможно, обратитесь за поддержкой к своему системному администратору.
  • Проверьте всю доступную документацию в вашей организации. Часто кто-то где-то документировал, как использовать прокси с приложениями, отличными от основного веб-браузера, но это может занять некоторое время.
  • Вы можете спросить на этом сайте. Нам понадобится как можно больше информации о прокси: название программного обеспечения прокси, если оно у вас есть (оно, вероятно, отображается на странице, где запрашивается пароль), точные настройки, которые вы используете, копирование-вставки всех подсказок и сообщений об ошибках и т.д.

Кроме того, вы пытаетесь установить пакет для неправильной версии Ubuntu. Synaptic 0.81.2 - это версия предстоящей Ubuntu 14.10. У вас есть libapt-pkg4.12 0.9.7.5, который является версией в Ubuntu 12.10. Вы не можете смешивать пакеты из разных версий Ubuntu (ну, вы можете попробовать, но в большинстве случаев вы столкнетесь с ошибками зависимостей, как эта).

Ubuntu 12.10 больше не поддерживается, и большинство зеркал больше не несут его. Вы всё ещё можете получить пакеты из old-releases.ubuntu.com в сжатом виде, но вы не получите больше никаких обновлений безопасности или других исправлений ошибок. Вам необходимо обновиться как можно скорее. Прямые обновления с 12.10 до 14.04 не поддерживаются; обычно вам нужно обновить версию по версии или с версии LTS до другой версии LTS, но есть исключение: вы можете пойти 12.10 → 13.10 → 14.04.

.

1
19.11.2014, 05:00
2 ответа
VALUE=083551726
awk -v CMPVALUE="$VALUE" '{linevalue=substr($0,0,9)+0; CMPVALUE=CMPVALUE+0;
  if(linevalue > CMPVALUE) exit; lineno=FNR};
  END {if (lineno>0) print lineno " " $0;
  else print "0 ";}' file
0 

VALUE=083551726555
awk -v CMPVALUE="$VALUE" '{linevalue=substr($0,0,9)+0; CMPVALUE=CMPVALUE+0;
  if(linevalue > CMPVALUE) exit; lineno=FNR};
  END {if (lineno>0) print lineno " " $0;
  else print "0 ";}' file
3 093053087TIJKL
2
27.01.2020, 23:37

Рассмотрим эту bash версию:

#! /bin/bash
exec 3<test.txt
COUNT=0
while read VALUE
do
    if [[ -z $LAST_VAL ]]
    then
        IN_VAL="$LAST_VAL"
    else
        LINE="$(head <&3 -1)"
        IN_VAL="$(cut -c1-9 <<<'$LINE')"
        let COUNT=$COUNT+1
    fi

    while [[ $IN_VAL < $VALUE ]]
    do
        LINE="$(head <&3 -1)"
        IN_VAL="$(cut -c1-9 <<<'$LINE')"
        let COUNT=$COUNT+1
        LAST_VAL="$IN_VAL"
        [[ -z $IN_VAL ]] && break
    done
    echo $((COUNT - 1)) $LINE
    [[ -z $IN_VAL ]] && break
done

head (и некоторые другие инструменты, такие как grep с --max-count), в отличие от awk, оставляет поток расположенным сразу после последнего прочитанного символа, так что вы можете продолжать использовать тот же поток для поиска в дальнейшем. Проблема заключается в том, что когда прочитанное значение не совпадает, необходимо сохранить его для следующей итерации (как я делал это в LAST_VAL). Значения COUNT и LINE должны быть последними совпадающими номером и строкой. Таким образом, все это можно сделать за одно чтение файла.

0
27.01.2020, 23:37

Теги

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