はじめに
diffはファイル同士を比較するコマンドですが、ファイルではなくコマンドの実行結果を比較したいと思う場面も多々あります。
そんな時は、コマンドの実行結果をファイルにリダイレクトしてから、それらのファイルをdiffするという方法が一般的です。
しかし、今回ご紹介する方法を使えば余計なファイルを作成することなく、手軽にコマンド実行結果をdiffで比較することができます!!
注意事項
この方法はbashで動作します。shだとエラーになるので注意してください。
コマンド実行結果を直接diffで比較
$ diff <(コマンドA) <(コマンドB)
実践例
a.csvファイルとb.csvファイルのヘッダ行だけを比較したい場合
$ diff <(head -n 1 /tmp/a.csv) <(head -n 1 /tmp/b.csv)
<( ) 解説
( )はサブシェル
丸括弧で括った中に記載したコマンドはサブシェルで実行され、別のシェルを開いて実行されたように動作します。
<(コマンド) で標準出力をファイルとして渡す
<( )とすることで、サブシェルの実行結果(標準出力)をファイルとして扱えるようになります。
これにより、上記の例ではコマンドAの標準出力をファイルとしたものと、コマンドBの標準出力をファイルとしたものをdiffで直接比較できるということになります。
コメント