LINUX.ORG.RU
ФорумAdmin

Валидация на AWK

 ,


0

2

Нужно написать скрипт на AWK, который принимает входные данные через консоль - Имя, email, № мобильного и № машины.
В случае, если пользователь ввел данные неверно, вывести ошибку в консоль.

Ясно, продолжай сообщать ситуацию.

anonymous ()
Ответ на: комментарий от Deleted

Интересует

Интересует - как через getline получать значение, как создать нужные regexp конкретно для awk, как сверяться с regexp. Если есть литература, в которой это расписано, поделитесь, пожалуйста. Я, например, не нашел. Если можете, то скиньте простой пример валидации имени - первая буква большая, остальные нет. Не совсем представляю как это будет выглядеть в awk.

Tamazi ()

Это сурьёзная работа, вам по сути нужен нехилый такой валидатор, у гуру это может занять более получаса, а получас гуру, сами знаете, стоит недёшево...

Pyzia ★★★★★ ()

Покажи хотябы, что на вход скрипта подается.

Bootmen ★☆☆ ()

Нужно написать скрипт на AWK

Кому нужно? Мне не нужно. Мне нужно $90, например. :3

r3lgar ★★★★★ ()

Имя, email, № мобильного и № машины.
В случае, если пользователь ввел данные неверно, вывести ошибку в консоль.

То есть вам нужно отправить письмо по почте, письмо по телефону, запрос в паспортный стол и в ГАИ?

Вы опредленно выбрали для этого неудачный язык.

Zmicier ★★★★★ ()
Ответ на: комментарий от Zmicier

Язык хороший. Авк для этого хорош. Сегодня пьянствую, Первомай. Завтра что-нибудь придумаем.

Deleted ()

Содержимое validator.awk

# Функция выводит сообщение, запрашивая у пользователя данные
function get_from_user(message) {
    print message
    getline data
    return data
}

# Пример валидации имени
function validate_name(name) {
    # Тут нужно написать логику валидатора
    # ...

    # И, если валидация прошла успешно, вернуть true
    return 1

    # Иначе вернуть false
    return 0
}

# Аналогично
function validate_email(email) {
    # ...
}
function validate_phone_number(phone_number) {
    # ...
}
function validate_car_number(car_number) {
    # ...
}

function main() {
    name = get_from_user("Введите имя:")
    email = get_from_user("Введите электропочту:")
    phone_number = get_from_user("Введите номер телефона:")
    car_number = get_from_user("Введите номер машины:")

    # Валидация имени
    if (!validate_name(name)) {
        print "Ошибка: имя введено неверно"
        return
    }

    # Валидация всего остального
    # ...

    print "Все данные введены верно"
}

BEGIN {
    main()
}

Запуск валидатора:

awk -f validator.awk

evbogdanov ()
Ответ на: комментарий от evbogdanov

Спасибо

Изначально я неправильно понял как использовать regexp и getline, разобрался и дело пошло - сейчас уже все сделано как у Вас, только еще есть отдельная функция, в которой выведены getline-ы. Хотел пошутить про валидацию прислав код из 26 if-ов проверки имени вместо regexp, но лень. Тему можно удалять.

Tamazi ()

Вот еще решение https://pastebin.com/QQpebAWB

Аргументы ожидаются в одной строке в формате: «Вася, vasya@gmail.com, +7 920 555-44-33, В007ПП|55»

Пример выполнения: awk -f val.awk

Коля, fsdf dfgdf, gdfgfd,В007ПП|55

Error: 'e-mail' incorrect Error: 'mobile' incorrect Usage/format: Вася, vasya@gmail.com, +7 920 555-44-33, В007ПП|55

anonymous ()
Ответ на: комментарий от anonymous

Тут форматирование поехало, в терминале все нормально

anonymous ()
Ответ на: комментарий от Deleted

Язык хороший. Авк для этого хорош. Сегодня пьянствую, Первомай. Завтра что-нибудь придумаем

Подтверждаю. Когда мне нужно что типа sed grep и тому подобное то я использую просто- awk. :)

Глюк встроенный- не может обрабатывать больше 1000 строк. Может уже исправили?

Bootmen ★☆☆ ()
Последнее исправление: Bootmen (всего исправлений: 3)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.