LINUX.ORG.RU

подсчитать количество строк выводимого

 


0

2

почему это работает?

com | tee >(wc -l ; echo \^ total lines)

это не работает?

com | tee >(wc -l ; echo \^ total lines) | head -n 3

это работает, но неправильно?

com | tee >(wc -l >&2; echo \^ total lines >&2) | head -n 3

а это работает, но результат зависит от количества котиков?

com | tee >(wc -l >&2; echo \^ total lines >&2) | cat | cat | head -n 3

здесь com - произвольная команда



Последнее исправление: FeelUs (всего исправлений: 2)

а почему-бы тебе не написать

com|wc -l
и не выёживаться?

это не работает? com | tee >(wc -l ; echo \^ total lines) | head -n 3

это работает.

tee это тройник, который отправляет один поток в субшелл, а второй поток отправляет в head, который ты и наблюдаешь.

Что именно тебе непонятно?

а это работает, но результат зависит от количества котиков?

не ешь больше этих грибов. Команда cat нужна для конкатенации, а не для извращений.

emulek
()

А такой код работает?

com | tee >( sleep 1; wc -l ; echo \^ total lines)

А то я пока так и не понял, какое именно поведение вы считаете правильной работой вашего творения.

mky ★★★★★
()
Ответ на: комментарий от emulek

а почему-бы тебе не написать

а по тому что я хочу не только посчитать кол-во строк, но и вывести несколько первых строк. если это результат выполнения g++ мне важно и то и то

это не работает? com | tee >(wc -l ; echo \^ total lines) | head -n 3

это работает.

результат wc и echo не выводится, именно по этому в следующем примере я и перенаправляю их вывод в поток ошибок

tee это тройник

как раз тут мне все понятно

работает, но неправильно

wc выводит аргумент команды head

не ешь больше этих грибов. Команда cat нужна для конкатенации, а не для извращений.

а если не работает - что делать?

FeelUs
() автор топика
Ответ на: комментарий от FeelUs

а по тому что я хочу не только посчитать кол-во строк, но и вывести несколько первых строк. если это результат выполнения g++ мне важно и то и то

так-бы сразу и сказал. Но конвейерами это делать неудобно, давай вот так:

#!/bin/bash

COUNT=0
while read LINE; do
	(( COUNT++ ))
	if (( COUNT <= 3 )); then
		echo "$LINE"
	fi
done< <(seq 1 100)

echo "$COUNT lines"

а если не работает - что делать?

не писать такой говнокод.

emulek
()
Ответ на: комментарий от emulek

sed, куда же без неё?

$ echo "line 1
line 2
line 3
line 4
line 5" | sed = | sed -n '1~2h;2~2{1,6p;${x;s/.*/& lines/p;}}'
line 1
line 2
line 3
5 lines
emulek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.