сравнить два поля в двух разных файлах

В file1 меня есть

 1023M BLD 123G DEV 945K Deployment 4899 INT 

В file2 меня есть

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

Я хотел сравнить первое поле file1 с первым полем file2 . Я просто хотел напечатать только несоответствующие поля в file3

С образцами файлов ниже команда предоставит вам необходимый результат

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

Пример вывода будет следующим:

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

используйте перенаправление к файлу, чтобы записать это в файл3.

Если вы хотите как-то подумать о проблеме в SQL, то вам обязательно нужно попробовать инструмент с именем « q »:

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

Это более понятно и легко понять, если вы знакомы с SQL-запросом.

Я бы использовал 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 

Затем вы можете увидеть значения, которые отличаются после символа трубы.

Гребьте это только тем, как в приведенном выше ответе:

 ➜ ~ 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