2つの異なるファイルの2つのフィールドの比較

2つの異なるファイルの2つのフィールドの比較

file1

1023M  BLD
123G   DEV
945K   Deployment
4899   INT

file2

1.2G   BLD
123G   DEV
345M   Deployment
499M   INT

の最初のフィールドとの最初のフィールドをfile1比較したいですfile2。一致しないフィールドだけを印刷したいです。file3

答え1

サンプルファイルを使用すると、次のコマンドを使用して目的の結果を取得できます。

$ paste file1 file2 | awk '$1!=$3'

サンプル出力は次のとおりです。

1023M  BLD  1.2G   BLD
945K   Deployment   345M   Deployment
4899   INT  499M   INT

file3に書き込むには、ファイルにリダイレクトを使用します。

答え2

SQL用語で考えたい場合は、必ず「」というツールを使ってみてください。キュー':

$ q 'SELECT f1.*, f2.* FROM file1 f1 JOIN file2 f2 ON f1.c2 = f2.c2 WHERE f1.c1 != f2.c1';

SQLクエリに精通している場合は、より明確で理解しやすくなります。

答え3

あまりハッキングされていない解決策と思われる場合は、diffまたはsdiffを使用し、必要に応じて出力を操作するためにawkなどを使用します。

➜  ~  sdiff 1.txt 2.txt
1023M  BLD                 |  1.2G   BLD
123G   DEV                    123G   DEV
945K   Deployment          |  345M   Deployment
4899   INT                 |  499M   INT

これにより、パイプ記号の背後にあるさまざまな値を表示できます。

上記の回答に示すように、その項目だけをGrepしてください。

➜  ~  sdiff 1.txt 2.txt | grep '|'
1023M  BLD                 |  1.2G   BLD
945K   Deployment          |  345M   Deployment
4899   INT                 |  499M   INT

私は個人的にこれがより滑らかな解決策だと思います。リダイレクトするには:

➜  ~  sdiff 1.txt 2.txt | grep '|' > 3.txt

diffとgrepを使用して、最初の行とは異なるフィールドのみを取得することもできます。

➜  ~  diff 1.txt 2.txt | grep "^>"
> 1.2G   BLD
> 345M   Deployment
> 499M   INT

関連情報