両方のコマンドで生成された出力に共通の行を削除します。

両方のコマンドで生成された出力に共通の行を削除します。

いくつかのテキストを返す2つのコマンドがあるとしましょう。たとえば、

$ ./c1
/usr/bin/foo
/usr/bin/bar
/usr/bin/baz
$ ./c2
/usr/bin/foo
/usr/bin/qux
/usr/bin/buzz
/usr/bin/bar

重複した行を削除したいです。つまり、出力は次のようになります(順序は重要ではありません)。

/usr/bin/baz
/usr/bin/qux
/usr/bin/buzz

どうすればいいですか?

ベストアンサー1

かなり単純なパイプラインでトリックを実行する必要があります。

(./c1; ./c2) | sort -u

角括弧は両方の標準出力を取得し、./c1コマンド./c2の標準入力に移動しますsort。このオプションは、-u一致する各行セットのうちの1つのみを印刷します。

簡素化について学んだJohn WH Smithと洞察力を与えてくれたBakuriuに感謝します。

おすすめ記事