Я пытаюсь создать сценарий awk, который может предоставить структурированный список информации об учетной записи для всех UID, превышающих 1000. Вот что я попробовал:это ожидаемый результат

BEGIN { FS=":"}

$3>1000 && $3<2000 {print $1   "  uid: " $3 " Full name: " $5 " Home dir "$6 " Shel :"$7}BEGIN { FS=":"} 

результат, который я получил

2 ответа2

0

Проблема здесь в том, что awk интерпретирует UID как строки; Вы можете заставить его интерпретировать как целые числа для сравнения, выполняя целочисленные вычисления с ним.

Самый простой способ - добавить 0 к значению.

Так

$3 + 0 > 1000 && $3 + 0 < 2000

Вот хорошая ссылка на awk для этого: https://www.gnu.org/software/gawk/manual/html_node/Strings-And-Numbers.html#Strings-And-Numbers

0

Попробуй это:

BEGIN { FS=":" }
{
  if($3 > 1000 && $3 < 2000){
    print $1
    print " uid: " $3
    print " Full name: " $5
    print " Home dir: " $6
    print " Shel: " $7
  }
}

Первая строка - BEGIN { FS=":" } - устанавливает разделитель поля в : в начале выполнения скрипта. Каждая строка будет разбита на отдельные столбцы и сохранена в переменные $1 - $n (n - количество разделенных полей).

После этого у вас есть { } и это будет выполняться для каждой строки ввода. Внутри находится if и он проверяет значение uid , print s напечатает необходимые данные, если значение верное.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .