Я знаю, как объединить результат другой команды
paste -t',' <(commanda) <(commandb)
Я знаю, что один и тот же вход для другой команды
cat myfile | tee >(commanda) >(commandb)
Теперь, как объединить эти команды? Так что я могу сделать
cat myfile | tee >(commanda) >(commandb) | paste -t',' resulta resultb
Скажи у меня есть файл
мой файл:
1
2
3
4
Я хочу сделать новый файл
1 4 2
2 3 4
3 2 6
4 1 8
я использовал
cat myfile | tee >(tac) >(awk '{print $1*2}') | paste
даст мне результат по вертикали, где я действительно хочу вставить их в горизонтальном порядке.
Ответы:
Когда вы используете несколько замен процесса, вы не гарантируете получение результата в каком-то определенном порядке, поэтому вам лучше придерживаться
Предполагая, что
cat myfile
стоит какой-то дорогой конвейер, я думаю, что вам придется хранить выходные данные либо в файле, либо в переменной:Используя ваш пример:
Еще одна мысль: FIFO и один трубопровод
источник
yash
Оболочка имеет уникальные особенности ( переназначения трубопровода и переназначение процесса ) , которые делают , что легче там:3>>|4
( перенаправление конвейера ) создает канал, где конец записи находится на fd 3, а конец чтения на fd 4.3>(commanda>&3)
это перенаправление процесса , немного похоже на подстановку процесса ksh / zsh / bash, но просто выполняет перенаправление и не заменяет его на/dev/fd/n
.ksh
«s»>(cmd)
более или менее совпадает сyash
«s»n>(cmd) /dev/fd/n
(естьn
выбранный дескриптор файла,ksh
над которым у вас нет контроля).источник
С
zsh
:Тогда используйте как:
Это адаптировано из этого другого вопроса, где вы найдете некоторые подробные объяснения и подсказки об ограничениях (остерегайтесь тупиков!).
источник
Для вашего конкретного примера не должно быть нужды
paste
и всего остального. Часто бывает так, что когда мы сталкиваемся с ограничением стандартного набора инструментов, это происходит потому, что то, что мы хотим сделать одним способом, можно сделать другим. Такие как:... который печатает ...
Вы можете получить файл с содержимым, как вы упомянули в
"$@"
массиве оболочки, как ...И чтобы проверить значения arg в цикле, подобном приведенному выше, вы можете немного изменить первоначальный тест ...
... который печатает ошибку в stderr, только если строка, считываемая с,
set -- $(cat)
содержит строку, которая не состоит целиком из одного целого числа.источник