LINUX.ORG.RU

Вопрос о awk и sed


0

0
Не могу понять в чём проблема....

Когда пишу:

%echo '1>' | sed 's|>||'
1

Когда пишу:

tail -f monitor.log | awk {'print $6'} | sed 's|>||'

Ничего вообще не отображается, хотя без '| sed...' отображаются значения вроде:

3>
4>
12>
...

С чем это связано? Мне почему-то кажется что awk как-то херячит значения, посему стирается всё нафиг.

NB! задание необходимо выполнить только на shell, без всяких перлов.
★★★★★
$ cat t 3> 4> 12> $ tail t| awk {'print $1'} | sed 's|>||' 3 4 12 $
ansi ★★★★
()
Попробуйте вот это, может станет понятно, что это буферезация:

{ echo -e '1 2 3 4 5 6>' ; sleep 10 ; } | awk {'print $6'} | sed 's|>||'

mky ★★★★★
()
T.e.

$ cat t
3>
4>
12> 
$ tail t| awk {'print $1'} | sed 's|>||'
3
4
12
$ 
ansi ★★★★
()
>tail -f monitor.log | awk {'print $6'} | sed 's|>||' 

tail -f monitor.log | awk '{split($6,a,">"); print a[1]}'
sdio ★★★★★
()
Отлично! Всем огромное спасибо.
soko1 ★★★★★
() автор топика
tail -f monitor.log | awk {'print $6'; fflush();} | sed 's|>||'

Причина - буферизация. Если после sed будет ещё конвейер строиться, то нужно будет сделать так:

tail -f monitor.log | awk {'print $6'; fflush();} | sed -u 's|>||' | grep '111'

для grep "лечение" опцией --line-buffered
и т.д.
Slavaz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.