私は現在やっています:
cat file1 file2 | sort -k1,1 > temp_file
command [options] -i temp_file > result_file
-i はコマンド入力を指定します。この場合、temp_fileを明示的に指定せずにこれを実行する方法が必要です。
cat file1 file2 | sort -k1,1 | command [options] -i > result_file
失敗し、-iの後にファイルがないと文句を言います。
私も試しましたパラメータただし、これはファイルではなくコンテンツの各行で実行されます。
ベストアンサー1
一部のアプリケーションでは、-
stdinが何を意味するのかを理解しています(マンページの確認)。
sort... | cmd -i - > result.txt
ほとんどのシステムには、オープン時にstdinをコピーするかのように動作する特別な/dev/stdin
ファイル(と同じ)があるため、次のようになります。/dev/fd/0
sort... | cmd -i /dev/stdin > result.txt
一部のシェル(ksh、zsh、bash)を使用して以下を作成することもできます。
cmd -i <(sort...) > result.txt
これが動作している間、ファイルはパイプなのでパイプではありません。閲覧可能。一部のファイルはcmd
検索可能ファイルまたは一般ファイルを必要とする可能性があり、ファイルがパイプの場合は失敗します。まあ、一時ファイルを使用するしかありません。
これにより、次のフォームをzsh
使用できます。=(...)
プロセスの交換:
cmd -i =(sort ...) > result.txt
zsh
一時ファイルを自動的に作成、塗りつぶし、整理するために使用されます。
と同じfish
、使用psub
:
cmd -i (sort... | psub -f) > result.txt
の場合はbash
まだ/dev/fd/x
ファイルを使用していますが、今回は通常の一時ファイルでより安定したクリーンアップのため開いた直後に削除されました。
tmp=$(mktemp) && {
rm -f -- "$file" &&
sort... >&3 3>&- 4<&- &&
cmd -i /dev/fd/4 3>&-
} 3> "$tmp" 4< "$tmp"