Ошибки при парсинге в AWK

Установка, обновление, настройка Linux

Модераторы: Olej, adminn

helgisbox
Интересующийся
Сообщения: 7
Зарегистрирован: 13 авг 2015, 16:33
Контактная информация:

Ошибки при парсинге в AWK

Непрочитанное сообщение helgisbox » 17 авг 2015, 08:44

По дефолту в RHEL 5.5 был установлен пакет gawk-3.1.5-14.el5.x86_64. Есть ряд программ, например Tivoli, который в своих инсталляторах везде использует конструкции вида awk '{print $7}'. Делает такой парсинг. Не только в инсталляторах, но агенты у него почему-то тоже часто такое используют. На нескольких машинах одновременно ставились ОС с дефолтными пакетами и на одной только постоянно возникают такие ошибки при работе скриптов, которые вызывают такой парсинг awk:

Код: Выделить всё

awk: fatal error: internal error
Aborted
Простой пример: берешь просто парсинг соджержимого каталога и он на каждый 7 запуск, к примеру, выдает пачку ошибок, а 6 запусков проходит успешно. На самом деле 1 из 7 - тоже нерегулярно - иногда чаще иногда реже. Ошибка появляется нерегулярно. В инсталляторе - тоже запускаешь несколько раз и каждый раз на разных этапах вылетает. Вот пример:

Код: Выделить всё

[root@host1 prereqchecker]# ls -R -la |awk '{print $3}'
awk: fatal error: internal error
Aborted
You have new mail in /var/spool/mail/root
Переустановил сам пакет gawk-3.1.5-14.el5.x86_64 на "больной" машине (viewtopic.php?f=19&t=4305&p=13072#p13072). Не помогло.
С чем может быть связана ошибка?
- может есть какие-то параметры системы, которые его работе мешают? Вроде как простой текстовый парсинг - это настолько просто... не понятно, что именно может не давать ему работать. На этом же сервере еще много ПО разного работает и нигде ошибок не было. Если бы ошибка диска или памяти физическая была - проявилось бы.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Ошибки при парсинге в AWK

Непрочитанное сообщение Olej » 17 авг 2015, 12:50

helgisbox писал(а): Простой пример: берешь просто парсинг соджержимого каталога и он на каждый 7 запуск, к примеру, выдает пачку ошибок, а 6 запусков проходит успешно. На самом деле 1 из 7 - тоже нерегулярно - иногда чаще иногда реже. Ошибка появляется нерегулярно. В инсталляторе - тоже запускаешь несколько раз и каждый раз на разных этапах вылетает. Вот пример:

Код: Выделить всё

[root@host1 prereqchecker]# ls -R -la |awk '{print $3}'
awk: fatal error: internal error
Aborted
You have new mail in /var/spool/mail/root
Странные вещи очень рассказываете, как это 1 раз из 7-ми, случайным образом, выполняется с ошибкой?

У меня в системе, например, установлено (по умолчанию) несколько вариантов awk:

Код: Выделить всё

olej@nvidia ~ $ ls -l /usr/bin/*awk
lrwxrwxrwx 1 root root     21 апр.   4 12:54 /usr/bin/awk -> /etc/alternatives/awk
-rwxr-xr-x 1 root root 532256 июля   2  2013 /usr/bin/dgawk
-rwxr-xr-x 1 root root 436480 июля   2  2013 /usr/bin/gawk
-rwxr-xr-x 1 root root   3188 июля   2  2013 /usr/bin/igawk
-rwxr-xr-x 1 root root 110760 марта 24  2014 /usr/bin/mawk
lrwxrwxrwx 1 root root     22 апр.   4 12:54 /usr/bin/nawk -> /etc/alternatives/nawk
-rwxr-xr-x 1 root root 436480 июля   2  2013 /usr/bin/pgawk
Ну, dgak и pgawk - это варианты gawk, а вот mawk, например - это альтернатива.

Код: Выделить всё

olej@nvidia ~ $ man mawk
...
DESCRIPTION
       mawk  is an interpreter for the AWK Programming Language.  
Сравните результат с другим интерпретатором AWK.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Ошибки при парсинге в AWK

Непрочитанное сообщение Olej » 17 авг 2015, 13:18

helgisbox писал(а):

Код: Выделить всё

[root@host1 prereqchecker]# ls -R -la |awk '{print $3}'
awk: fatal error: internal error
Aborted
You have new mail in /var/spool/mail/root
Возникло у меня такое подозрение ... что у вас не gawk ошибается, а где-то превышаются какие-то пределы ...
В вашем выводе ls выводит очень большой объём данных, и он а). передаётся через pipe, б). зависит от pwd, в). на разных компьютерах разный.
Посмотрите что там у вас в пределах стоит?
Сравните на разных компьютерах:

Код: Выделить всё

olej@nvidia ~ $ ulimit -S -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 32089
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 32089
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Код: Выделить всё

olej@nvidia ~ $ ulimit -H -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 32089
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 4096
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) unlimited
cpu time               (seconds, -t) unlimited
max user processes              (-u) 32089
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
Выведите свой ls в файл

Код: Выделить всё

# ls -R -la > xxx
А потом этот файл скормите 100 раз gawk. ;-)

P.S. gawk есть достаточно сильным расширением awk, он использует и GNU и POSIX стили...
Посмотрите (на разных компьютерах) в переменных окружения такую переменную POSIXLY_CORRECT - она меняет поведение gawk.
Ну и, естественно, man ;-) ... можно здесь: gawk - язык поиска и обработки шаблонов.

helgisbox
Интересующийся
Сообщения: 7
Зарегистрирован: 13 авг 2015, 16:33
Контактная информация:

Re: Ошибки при парсинге в AWK

Непрочитанное сообщение helgisbox » 17 авг 2015, 14:13

Сделал файл:

Код: Выделить всё

-rw-r--r--  1 root root      24 Jul 13  2006 .bash_logout
-rw-r--r--  1 root root     191 Jul 13  2006 .bash_profile
-rw-r--r--  1 root root     176 Jul 13  2006 .bashrc
drwx------  3 root root    4096 Jul  3  2014 .config
-rw-r--r--  1 root root     100 Jul 13  2006 .cshrc
drwx------  3 root root    4096 Jul  3  2014 .dbus
Выполнил всего несколько запусков, вот вывод:

Код: Выделить всё

[root@host1 ~]# cat xxx |awk '{print $3}'
awk: fatal error: internal error
Aborted
[root@host1 ~]# cat xxx |awk '{print $3}'
awk: fatal error: internal error
Aborted
[root@host1 ~]# cat xxx |awk '{print $3}'
awk: fatal error: internal error
Aborted
[root@host1 ~]# cat xxx |awk '{print $3}'
awk: fatal error: internal error
Aborted
[root@host1 ~]# cat xxx |awk '{print $3}'
root
root
root
root
root
root
[root@host1 ~]# cat xxx |awk '{print $3}'
awk: fatal error: internal error
Aborted
[root@host1 ~]#
На рабочих машинах, само собой - все проходит без ошибок.

Проверил есть ли еще awk-и:

Код: Выделить всё

[root@host1 ~]# ls -l /usr/bin/*awk
-rwxr-xr-x 1 root root 1022 Dec 10  2009 /usr/bin/addr2name.awk
lrwxrwxrwx 1 root root   14 Aug 13 09:24 /usr/bin/awk -> ../../bin/gawk
lrwxrwxrwx 1 root root   14 Aug 13 09:24 /usr/bin/gawk -> ../../bin/gawk
[root@host1 ~]# which gawk
/bin/gawk
[root@host1 ~]# which awk
/bin/awk
Переменную POSIXLY_CORRECT не нашел в выводе env, сравним пока с рабочими машинами вывод команды ulimit.

Ответить

Вернуться в «Администрирование Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей