比较两个不同文件中的两个字段

比较两个不同文件中的两个字段

在 中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':

$ 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

相关内容