いくつかの名前が入った 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
ここで、コマンド as を実行すると、との内容が書き込まれているcat file1 file2 > file3 | sort
ことがわかりますが、ソートされていません。file1
file2
file3
あなたが達成しようとしていることは、次のようにすればかなり簡単に達成できると思います。
cat file1 file2 | sort > file3
ただし、コンソール ウィンドウには出力が表示されません。
ソート後の 2 つのファイルの出力を新しいファイルに書き込むと同時に、ソートされた出力をコンソールで利用できるようにする必要がある場合は、以下のようにします。
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
ユーティリティの目的を次のように定義しています。
指定されたすべてのファイルの行をまとめて並べ替え、結果を指定された出力に書き込みます。
次のように 2 つのファイルを連結された出力ファイルに分類できます。
sort $opts file1 file2 >output_file
シェルの出力を見たい場合はstdout
そして結果を出力ファイルに保存し、次を使用しますtee
:
sort $opts file[12] | tee output_file