Использование замещения процесса или группировка & amp;
Пример:
wc < <(echo hi;echo bye)
(echo hi; bye) | wc
Но есть ли что-то противоположное?
То есть, есть способ отправить вывод одной команды в качестве входа для многих других команд в Но есть ли противоположность? ?
Что-то вроде:
cat testfile | wc | tail -n 5
( stdout ). Здесь я пытаюсь передать вывод cat testfile на оба wc и tail -n 5
. Другим примером может быть:
(чтобы получить последнее слово предложения)
echo "some random words"| wc -c | cut -f(out put of wc -c) (output of first echo)
Вам нужно tee разделить поток на части. Попробуйте:
cat testfile | tee >(wc -l) >(wc -w) >(wc -c) | tail -n 5
Примечания:
Если несколько процессов (wc, tail) все записывают в stdout: вы можете получить искаженный вывод. Нет гарантии о том, как будет выглядеть их выход. Чтобы увидеть это, попробуйте sleep 1; wc -w как второго потребителя. tee заблокирует, если какое-либо из его пунктов назначения не будет потреблять поток достаточно быстро. Смысл, адресаты будут подаваться на вход с примерно одинаковой скоростью (по модулю буферизации фиксированного размера). Для этого нет простого решения, единственной альтернативой является сохранение потока в файл и его передача потребителям отдельно. Для wc и tail это не проблема.Для последнего слова это проще:
echo "some random words" | awk '{print $NF}'
Пакет moreutils предоставляет команду pee (слияние трубы и тройника, что вы думаете?), которая делает именно это.
Для вашего первого примера вы бы использовали: [ ! d1]
cat testfile | pee wc "tail -n 5"
Второй пример более сложный, потому что вы хотите передать два входа в последнюю команду. Я бы, вероятно, использовал awk в качестве других ответов.
Ссылка: https://joeyh.name/code/moreutils/