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

Оболочка расширяется */*[myPattern] и затем grep интерпретирует первое слово расширения как шаблон и остальные как имена файлов (кроме того, если любые из имен файлов, оказывается, не похожи grep опции команды). Это - в значительной степени тот же способ, которым это работает в каждой общей оболочке.

2
20.08.2014, 09:00
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

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

Отложите это только для них, как в ответе выше:

➜  ~  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
-1
27.01.2020, 21:52

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

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

Вывод-пример будет таким же, как ниже

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

используйте перенаправление в файл для записи в file3.

8
27.01.2020, 21:52

Если вы хотите осмыслить проблему с помощью SQL, вам определенно следует попробовать инструмент под названием ' q ':

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

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

0
27.01.2020, 21:52

Теги

Похожие вопросы