一部の行の順序が変更された2つのファイルがあります。これらを比較できるようにしたいと思います。
あるウェブサイトは次のようなものを提案しました:
diff <(sort text2) <(sort text1)
しかし、これはエラーになります:リダイレクトの名前がありません。
私はtcshを使用しています。上記のコマンドは別のシェル用ですか?
もっと良い方法はありますか?
このリダイレクト構文はbash固有です。したがって、tcshでは機能しません。
Bashを呼び出して、コマンドを直接指定できます。
bash -c 'diff <(sort text2) <(sort text1)'
そのための関数を次に示します。
function diffs() {
diff "${@:3}" <(sort "$1") <(sort "$2")
}
次のように呼び出します。
diffs file1 file2 [other diff args, e.g. -y]
おそらく、必要に応じて、David Schmittの回答に従って変更することができます。
もっと良い方法はありますか?
はいあります。
comm
ユーティリティを使用します。
使用法:comm [-123i] file1 file2
これがシェルで機能しない場合は、3行で実行してください。
sort text1 > text1.sorted
sort text2 > text2.sorted
diff text1.sorted text2.sorted
シンプルですが動作するはずです...
投稿された「diff」の問題は、diff
がstdin
経由でoneファイルしか受信できないことです。したがって、少なくとも1つのソート済みファイルを一時ファイルに書き込む必要があると思います。
diff - file.txt
stdinとfile.txtを比較します。 「-」は標準入力を表します
編集:私はプロセス置換がstdinを介して機能すると想定していました。しかし、そうではなく、上記は/dev/fd/{num}
上記のVardhanDotNetで指摘したとおり。