Awk - Print row if number is between column 1 and column 2

Мое содержание hoster помогло мне и нашло решение, которое не могло бы работать в 100%, но 90% (100% общая перезагрузка сервера).

Во-первых, так как я воссоздал специализированное /vhost/ каталог с моим сохраненным содержанием там (это не был бы Ваш случай), я удалил /vhosts/.

Во-вторых, я выполнил это от SSH: usr/local/psa/bootstrapper/pp11.0.9-bootstrapper/bootstrapper.sh repair

Мой hoster сказан:

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

Так, я воссоздал subscriptions/webspaces на Plesk. Затем я использовал резервные копии для восстановления subscriptions/webspaces к их исходному условию.

Можно иногда находить при воссоздании subscription/webspace, что учетная запись пользователя уже существует. Это вызвано тем, что восстановление начальной загрузки не оставило чистый лист в Plesk. Необходимо будет отредактировать psa база данных и ищет имя пользователя под sys_users таблица и удаляет его. Если Plesk все еще жалуется на пользователя, удалите фактическую учетную запись из SSH, добавил он.

2
24.05.2015, 10:13
4 ответа
$ awk -F',' -v y=1952 'BEGIN{print y":"} {line=$0;gsub("\"","");} $1+0<=y && y<=$2+0 {print line}' file
1952:
"1949","1962","FOO","BAR","BLUE"

Как это работает

  • -F ', «

    Это устанавливает сепаратор поля в запятую.

  • -V y = 1952

    Это определяет переменную awk y со значением 1952.

  • Начните {print y ":«;}

    Это распечатывает линию заголовка.

  • строка = $ 0; GSUB («\», «», «)

    Это сохраняет строку оригинальной строки . Затем он удаляет двойные цитаты из полей.

  • $ 1 + 0 <= y && y <= $ 2 + 0 {линия печати}

    Если значение y находится между значениями первой и второй колонны, затем распечатайте оригинал строку .

    в вышеупомянутом Линия, ноль добавляется к числам в первом и втором столбцах. Это уверяет, что awk относится к этим столбцам как цифры, не строки, и, следовательно, числовые, не строки, сравнения.

3
27.01.2020, 21:54

С более конкретным полевым сепаратором Compact AWK решение может быть:

awk -F '(","|^"|"$)' -v d=1952 'd>=$2 && d<=$3'

Примечания: из-за выбранного полевого сепаратора здесь поля $ 2 $ 3 являются соответствующими полями. Конечная цитата ( «$ ) была добавлена ​​для более общего случая, что любая линия может иметь только две даты без дополнительных данных. Заголовок опущен, как отмечено в другом комментарии; в противном случае добавьте Распечатать D ":"} . Основная часть d> = $ 2 && d <= $ 3 является самоснабжением.

2
27.01.2020, 21:54

Здесь можно найти аналогичную проблему. Основная идея - отключить автосуспенд в usbcore, если я правильно понял.

Попробуйте выполнить

echo -1 >/sys/module/usbcore/parameters/autosuspend

И перезагрузите систему после этого. Этот помог парню с форума ubuntu

-121--93134-

Более короткий awk :

$ awk -F\" -vn=1952 '$2<=n && $4>=n' file
"1949","1962","FOO","BAR","BLUE"

Выше будет работать с большинством современных awk , которые основаны на nawk .

С внедрением, полученным из оригинального awk, как oawk, вам нужно:

oawk -F\" 'BEGIN{n=1952}$2<=n && $4>=n'
1
27.01.2020, 21:54
awk ' y>=nq($1) && y<=nq($2)
      function nq(s) {return gensub(/^"|"$/,"","g",s)}
    ' F=, y=1951 file

Или, если вы предпочитаете, вы можете поместить переменные F abn y сразу после awk, а не в качестве параметра

awk -F, -vy=1951 
0
27.01.2020, 21:54

Теги

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