2016-04-07 8 views
0

これはLinuxコマンドラインのcommコマンドに関する質問です。通信コマンド - 不要な制限?

ソートされたファイルでのみ動作するのはなぜですか?なぜ私たちのためにファイルをソートできないのですか?例:file1file2があり、commを使用してそれらを比較したい場合、2つのファイルのいずれかがソートされていないと予期しない結果が得られることがわかります。なぜクリエイターは、引数がSORTEDファイルであることを強制するこの制限を追加しましたか?

これは不便で、このデフォルトのファイルを置き換えるシェルスクリプトを作成したいと感じています。comm

私の質問は、どうして私はそれを置き換えてはいけないのですか? constがC++プログラムに追加するかもしれないもののように、この制限をcommとするのは良いことですか?それは良い方法ですか?

ありがとうございました。

+0

オリジナルのUnixの哲学は、それぞれのコマンドが単純なことをすべきことでした。パイピングやその他のコマンド合成技術を使用して、望みの結果を得てください。 – Barmar

+0

大丈夫です。私は他のコマンドと一緒に遊んでいる時にそれを念頭に置いておきます、ありがとう。 – Lostinate

+0

ところで、 'comm'はこのような唯一のコマンドではありません。 'uniq'は似ていますが、隣接する行だけを比較します。 – Barmar

答えて

3

このデザインは、commプログラムをシンプルに保ちます。ファイルを比較するだけです。ファイルをソートする必要がある場合は、sortコマンドの複雑さが非常に高くなります。たとえば、内容がメモリに収まらない場合は一時ファイルが必要です。ファイルがすでにソートされている場合は、これは不要です。基本的なUnixの哲学は、各コマンドはオプションに基づいて1つのこと、あるいは多少のバリエーションを実行する必要があり、より複雑なニーズにそれらを組み合わせるべきです。

プロセス置換を使用してファイルを比較する前にソートできます。

comm <(sort file1) <(sort file2) 
関連する問題