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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.