Выставьте awk по tcp (inetd, socat, и т.д.)

2
20.02.2015, 19:28
2 ответа

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

Вот командная строка для прослушивания на порту 9000:

socat TCP4-LISTEN:9000 SYSTEM:'/tmp/awk.sh',pty,echo=0

А вот содержимое скрипта /tmp/awk.sh:

#!/usr/bin/awk -f
#
BEGIN   { print "This is the awk socket" }
        { print NR, $0 }
END     { print "All done" }

Пример выполнения:

$ nc -vvv otherhost 9000
otherhost [192.168.1.15] 9000 (?) open
This is the awk socket
hello world
1       hello world
how are you
2       how are you
boo
3       boo
^C sent 28, rcvd 61
0
27.01.2020, 22:12

awk - это печать на стандартной вывод, которая является буферизацией линии, когда он указывает на терминал, и полностью буферизован, если нет; Это означает, что вы должны получить выход после заполнения буфера, т.е. напечатали (например,) 4kb.

Вы можете проверить это, отправив много вывода (например, используя программу Да); исправить вас либо: - stdout nabufer awk (см. Например, https://unix.stackexchange.com/a/25375/63847 ) - Используйте системный вызов отключения (2) от отправителя (уродливый)

Любое лучшее решение приветствуется

2
27.01.2020, 22:12

Теги

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