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