URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 62130
[ Назад ]

Исходное сообщение
"Ворос по awk?"

Отправлено Руля , 25-Ноя-05 11:58 
В скрипте awk-шном ввожу такую вот строчку:
"time=`date +%d-%H` |/usr/bin/touch /var/log/log$time" |getline mess
При этом файл создается только при запуске скрипта, а с течением времени новый файл не создается. Какого?

Содержание

Сообщения в этом обсуждении
"Ворос по awk?"
Отправлено allez , 25-Ноя-05 13:37 
>В скрипте awk-шном ввожу такую вот строчку:
>"time=`date +%d-%H` |/usr/bin/touch /var/log/log$time" |getline mess
>При этом файл создается только при запуске скрипта, а с течением времени
>новый файл не создается. Какого?


А хрен его знает, товарищ майор. Пока не покажете весь скрипт, ничего
сказать не могу. Может, у вас эта строчка всего один раз и выполняется?


"Ворос по awk?"
Отправлено Руля , 25-Ноя-05 13:54 
>А хрен его знает, товарищ майор. Пока не покажете весь скрипт, ничего
>
>сказать не могу. Может, у вас эта строчка всего один раз и
>выполняется?
Делаю следующее:
tcpdump -paramert |filte &
В filter:
#!/usr/bin/awk -f
#
BEGIN {
...
}
{
"time=`date +%d-%H` |/usr/bin/touch /var/log/tcplog/tcplog/tcp$time" |getline mess
...
}
END {
...
}

Это все запускается и работает в фоне. Время при старте считуется и не меняется больше (только при перезапуске). Соответсвенно файлы не генерятся.


"Ворос по awk?"
Отправлено YuryD , 25-Ноя-05 14:44 
>"time=`date +%d-%H` |/usr/bin/touch /var/log/tcplog/tcplog/tcp$time"

может полного пути к date не хватает ? :-)


"Ворос по awk?"
Отправлено vt , 25-Ноя-05 15:22 
>#!/usr/bin/awk -f

>{
>"time=`date +%d-%H` |/usr/bin/touch /var/log/tcplog/tcplog/tcp$time" |getline mess
>...
>}

man awk:
command | getline [var]
Run command piping the output either into $0 or var

поэтому только так:
{
"date +%d-%H" | getline time
system( "touch file" time )
}


"Ворос по awk?"
Отправлено Руля , 25-Ноя-05 15:34 
>"date +%d-%H" | getline time
Так вот эта вот строчка также не пашет. При запуске скрипта оно один раз считует дату в переменную time и потом оно уже не меняется.


"Ворос по awk?"
Отправлено Руля , 25-Ноя-05 15:43 
>>"date +%d-%H" | getline time
>Так вот эта вот строчка также не пашет. При запуске скрипта оно
>один раз считует дату в переменную time и потом оно уже
>не меняется.
Вопчим, нада так:
time=system("date +%d-%H")

"Ворос по awk?"
Отправлено vt , 25-Ноя-05 16:24 
>Вопчим, нада так:
>time=system("date +%d-%H")

Нет, system не возвращает stdout
По крайней мере, в gawk

А время, действительно, не меняется:

$ cat tic.sh
#!/bin/sh
date
sleep 1
$0

$ cat test.awk
#!/bin/awk -f
{
"date +%s" | getline time
print time
}

$ ./tic.sh | ./test.awk
1132924700
1132924700
1132924700

Это интересно
Но сегодня уже нет времени разбираться


"Ворос по awk?"
Отправлено vt , 25-Ноя-05 20:07 
awk выполняет команду только один раз
getline построчно вычитывает stdout выполнения команды
Первое выполнение getline - первую строку, второе - вторую и тд
Чтобы выполнить команду повторно, ее надо "закрыть"
{
command = "date +%s"
command | getline time
close( command )
print time
}

В gawk для работы с датой-временем лучше пользоваться функцией strftime