В скрипте awk-шном ввожу такую вот строчку:
"time=`date +%d-%H` |/usr/bin/touch /var/log/log$time" |getline mess
При этом файл создается только при запуске скрипта, а с течением времени новый файл не создается. Какого?
>В скрипте awk-шном ввожу такую вот строчку:
>"time=`date +%d-%H` |/usr/bin/touch /var/log/log$time" |getline mess
>При этом файл создается только при запуске скрипта, а с течением времени
>новый файл не создается. Какого?
А хрен его знает, товарищ майор. Пока не покажете весь скрипт, ничего
сказать не могу. Может, у вас эта строчка всего один раз и выполняется?
>А хрен его знает, товарищ майор. Пока не покажете весь скрипт, ничего
>
>сказать не могу. Может, у вас эта строчка всего один раз и
>выполняется?
Делаю следующее:
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 {
...
}Это все запускается и работает в фоне. Время при старте считуется и не меняется больше (только при перезапуске). Соответсвенно файлы не генерятся.
>"time=`date +%d-%H` |/usr/bin/touch /var/log/tcplog/tcplog/tcp$time"может полного пути к date не хватает ? :-)
>#!/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 )
}
>"date +%d-%H" | getline time
Так вот эта вот строчка также не пашет. При запуске скрипта оно один раз считует дату в переменную time и потом оно уже не меняется.
>>"date +%d-%H" | getline time
>Так вот эта вот строчка также не пашет. При запуске скрипта оно
>один раз считует дату в переменную time и потом оно уже
>не меняется.
Вопчим, нада так:
time=system("date +%d-%H")
>Вопчим, нада так:
>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 выполняет команду только один раз
getline построчно вычитывает stdout выполнения команды
Первое выполнение getline - первую строку, второе - вторую и тд
Чтобы выполнить команду повторно, ее надо "закрыть"
{
command = "date +%s"
command | getline time
close( command )
print time
}В gawk для работы с датой-временем лучше пользоваться функцией strftime