両方のファイルを新しいファイルにリンクして出力をソートする方法

両方のファイルを新しいファイルにリンクして出力をソートする方法

いくつかの名前を含む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の内容が記録されたがソートされていないことがわかります。file1file2file3

私はあなたが達成したいことが簡単にできると信じています。

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

関連情報