Если только один из входных файлов должен поступать от команды, достаточно простой трубы. Используйте -
в качестве имени файла для обозначения стандартного ввода.
curl 'http://example.com?code=$1&fmt=csv' | join -1 1 -2 1 file1 -
Если оба файла должны быть получены из труб, то вам нужно что-то большее, чем базовые возможности оболочки. В Ksh, bash и zsh есть подстановка процесса, которая позволяет передавать вывод команды в любом месте, где программа ожидает имя файла.
curl 'http://example.com?code=$1&fmt=csv' | sort |
join -1 1 -2 1 <(sort file1) -
или эквивалентно для симметрии
join -1 1 -2 1 <(
Обычный sh не имеет подстановки процессов. Переносное решение, если вам нужно, чтобы команда получала входные данные из нескольких труб, - использовать именованные трубы.
tmp="$(mktemp -d)"
mkfifo "$tmp/p"
sort "$tmp/p" &
curl 'http://example.com?code=$1&fmt=csv' | sort | join -1 1 -2 1 "$tmp/p" -
rm "$tmp/p"
rmdir "$tmp"