gpt4 book ai didi

linux - 用 awk 比较两个 txt 文件,它们都有 4 列

转载 作者:太空宇宙 更新时间:2023-11-04 12:51:57 25 4
gpt4 key购买 nike

我有两个 txt 文件,假设 file1 和 file2 有 4 列.....表名、列名、数据类型、长度

文件1包含

Emp name varchar 30
Emp ID int 20
Emp age int 3
Emp no int 10

文件2包含

Emp name varchar 30
Emp ID varchar 20
Emp age int 5
Emp DOB. Date 10

我想根据第1列和第2列(表名,列名)比较file1和file2

根据那2列比较数据类型和长度列是否不匹配

如果数据类型或长度不匹配显示相应的行,如(来自两个文件的数据,同一行)

Emp age  int 3 Emp age  int 5

像输出文件1中的唯一行

Emp emailid varchar 50

作为另一个命令的输出

当我对文件 1 的唯一记录使用 comm 命令时它给出类似的输出

Emp ID   int 20
Emp age int 3
Emp no int 10

但希望o/p只是

Emp no int 10

因为列(表名、列名)也存在于文件 2 中。

最佳答案

根据你的详细描述,我想出了这个单行:

awk '{k=$1FS$2}NR==FNR{a[k]=$3FS$4;next}
k in a{if($3FS$4!=a[k])print $0,k,a[k];next}7' file2 file1

使用给定的输入文件:

kent$  head f1 f2
==> f1 <==
Emp name varchar 30
Emp ID int 20
Emp age int 3
Emp no int 10

==> f2 <==
Emp name varchar 30
Emp ID varchar 20
Emp age int 5
Emp DOB. Date 10

kent$ awk '{k=$1FS$2}NR==FNR{a[k]=$3FS$4;next}k in a{if($3FS$4!=a[k])print $0,k,a[k];next}7' f2 f1
Emp ID int 20 Emp ID varchar 20
Emp age int 3 Emp age int 5
Emp no int 10

注意全部区分大小写。例如。 idID 是不同的。

关于linux - 用 awk 比较两个 txt 文件,它们都有 4 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36919134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com