いくつかの名前を含む2つのファイルがあります。を実行すると、cat file1 file2 | sort
端末にアルファベット順にソートされた名前が表示されますが、実行するとソートされたcat file1 file2 > file3 | sort
出力は表示されません。なぜですか?
答え1
file1
との出力をfile2
新しいファイルにリダイレクトしましたfile3
。
cat file1 file2 > file3 | sort
配管後にこのコマンドを使用してくださいsort
。
これは次のように確認できます。
cat file1
A
Z
B
cat file2
F
G
C
これでコマンドを実行すると、cat file1 file2 > file3 | sort
の内容が記録されたがソートされていないことがわかります。file1
file2
file3
私はあなたが達成したいことが簡単にできると信じています。
cat file1 file2 | sort > file3
ただし、コンソールウィンドウに出力は表示されません。
両方のファイルのソートされた出力を新しいファイルに書き込んで、ソートされた出力をコンソールで使用できるようにする必要がある場合は、次のようにします。
cat file1 file2 | sort > file3; cat file3
tee
それでも、このような場合にはお勧めします。tee
次のように効果的に使用できます。
cat file1 file2 | sort | tee file3
上記のコマンドは、デフォルトで2つのファイルを連結してソートし、パイプの出力をコマンドで指定された新しいファイルに書き込む間にコンソールに出力を表示しますtee
。
ユーザーとしてキャッシュzsh
システムに使用可能なシェルがある場合は、次のコマンドも使用できることを指摘してください。
sort <file1 <file2 | tee file3
答え2
POSIX は、sort
このユーティリティの目的を次のように定義します。
指定されたすべてのファイルの行をソートし、結果を指定された出力に書き込みます。
両方のファイルをリンクされた出力ファイルにソートできます。たとえば、次のようになります。
sort $opts file1 file2 >output_file
シェルから出力を表示するにはstdout
そして結果を出力ファイルに保存し、次を使用しますtee
。
sort $opts file[12] | tee output_file