Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: добавить дату в каждую строку вывода программы  (Прочитано 2935 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн narkom

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Добрый день!
Вот давно пытаюсь решить такую задачку в баше.
Как дописать в начало или конец строки, выводимой некоей программой, время этого самого вывода.
Типа как nl, только вместо нумерации - дата/время.
Пробовал, например, так:

echo '#!/bin/bash' > ttt
echo 'echo qqqq' >> ttt
echo 'sleep 2' >> ttt
echo 'echo aaa' >> ttt
chmod u+x ttt
./ttt | xargs -I'{}' echo $(date +%T) "{}"

получается
18:09:49 qqqq
18:09:49 aaa

а должно
18:09:49 qqqq
18:09:51 aaa

То есть время вывода в каждой строке должно быть именно временем вывода, а не временем запуска.
Поможите, если у кого есть какие мысли.

Оффлайн Malamut

  • Ubuntu Member
  • Администратор
  • Старожил
  • *
  • Сообщений: 3337
  • Я добрый, честно!
    • Просмотр профиля
    • Моя страница на Launchpad
man date - не? А ещё `` - подстановка вывода. Точнее:

echo `date +%T` "aaaaa"
$ echo `date +%T` "test"
16:03:41 test
"Носителем суверенитета и единственным источником власти в Российской Федерации является ее многонациональный народ" Конституция РФ

Оффлайн narkom

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
ttt трогать нельзя, нужно модифицировать ее вывод.

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
./ttt | awk '{system("date +%T|tr -d \"\\n\"");print " "$0}'

Оффлайн narkom

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
не катит ((


./ttt | awk '{system("date +%T|tr -d \"\\n\"");print " "$0}'
16:35:28 qqqq
16:35:28 aaa

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Не верю. (с)
mamon@mamon-netbook:/usr/home/mamon$ (echo one;sleep 2;echo two)|awk '{system("date +%T|tr tr -d "\n"");print " "$0}'
17:12:20 one
17:12:22 two

Пользователь решил продолжить мысль 29 Декабря 2010, 17:16:00:
Что за ttt? Он буферизировать вывод может?

Пользователь решил продолжить мысль 29 Декабря 2010, 17:40:31:
А, перечитал, понял. Но и оно работает:
mamon@mamon-netbook:/usr/home/mamon/tmp/a$ echo '#!/bin/bash' > ttt
mamon@mamon-netbook:/usr/home/mamon/tmp/a$ echo 'echo qqqq' >> ttt
mamon@mamon-netbook:/usr/home/mamon/tmp/a$ echo 'sleep 2' >> ttt
mamon@mamon-netbook:/usr/home/mamon/tmp/a$ echo 'echo aaa' >> ttt
mamon@mamon-netbook:/usr/home/mamon/tmp/a$ chmod +x ttt
mamon@mamon-netbook:/usr/home/mamon/tmp/a$ ./ttt |  awk '{system("date +%T|tr -d "\n"");print " "$0}'
17:38:56 qqqq
17:38:58 aaa

Пользователь решил продолжить мысль 29 Декабря 2010, 17:47:06:
А awk какой системы стоит? (update-alternatives --display awk)
« Последнее редактирование: 29 Декабря 2010, 17:47:06 от Mam(O)n »

Оффлайн narkom

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
update-alternatives --display awk
awk - автоматический режим
 ссылка сейчас указывает на /usr/bin/mawk
/usr/bin/mawk -- приоритет 5
 подчинённый awk.1.gz: /usr/share/man/man1/mawk.1.gz
 подчинённый nawk: /usr/bin/mawk
 подчинённый nawk.1.gz: /usr/share/man/man1/mawk.1.gz
Текущая `лучшая' версия: /usr/bin/mawk.

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Ага, понятно. У меня gawk, и там таких проблем нет. В случае же с mawk нужно ему указывать, чтобы не использовался буффер.
./ttt | mawk -W interactive '{system("date +%T|tr -d \"\\n\"");print " "$0}'

Оффлайн narkom

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Спасибо!

Ваш первый код, как выяснилось, работает и на, что главное, реальной  задаче (psql developer postgres -c 'reindex database developer'), но не работает на тесте (который, на мой, очевидно, ошибочный взгляд, имитировал реальную задачу).  Второй код, решает и тест.
Еще раз спасибо.

 

Страница сгенерирована за 0.017 секунд. Запросов: 18.