繁体   English   中英

比较两个带有awk的txt文件,两个文件中都有4列

[英]Compare two txt files with awk, both have 4 columns present in it

我有两个txt文件,比方说file1和file2有4列.....表名,列名,数据类型,长度

File1包含

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

File2包含

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(表名,列名)也存在于文件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不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM