繁体   English   中英

Linux:在Linux中使用AWK,当制表符分隔文件的值不匹配时,如何打印行号和列号

[英]Linux : How can I print line number and column number when values do not match for tab separated files using AWK in linux

比较文件1与文件2,并打印行号。 对于差异记录和文件2中存在差异的列号。

在文件1中:

User_ID   First_name    Last_name   Address                       Postal_code 
User_1    fistname      Lastname    35, Park Lake, California           32068    
user2     Johnny        Depp        32, Park Lake, California               
user3     Tom           Cruise      5322 Otter Lane Middleberge         32907    
user4     Leonardo      DiCaprio    Half-Way Pond, Georgetown           1230    
user5     Sylvester     Stallone    6762,33 Ave N,St. Petersburg        33710   
user6     Srleo         Stallone    6762,33 Ave N,St. Petersburg        33700

在文件2中:

User_ID   First_name    Last_name   Address                       Postal_code     
User_1    fistname      Lastname    35, Park Lake, California           32068    
user2     Johnny        Depp        32, NEW Street, California          96206    
user30    Tom           Cruise      5322 Otter Lane Middleberge         32907   
user4     Leonardo      DiCaprio'   Half-Way Pond, Georgetown           00000    
user5     Sylvester     Stallone    6762,33 Ave N,St. Petersburg        33710   
user7     Nicolas       Cage                                            55010    
user6     Srleo         Stallone    6762,33 Ave N,St. Petersburg        33700

**预期结果:-

file2中的区别是行号后跟列号(其中值不匹配)**

Line No. 2 COLUMN NO- 4,5    
Line No. 3 COLUMN NO-1    
Line No. 4 COLUMN NO 3,5    
Line No. 5 COLUNN NO 5    
Line No. 6 COLUMN NO 1,2,3,4,5

注意:要比较的文件大小以GB为单位,并且文件用制表符分隔,并且有超过400个制表符分隔列。

我在用-

awk 'NR==FNR{Arr[$0]++;next}!($0 in Arr){print FNR}' file1 file2

但是,它给了我行号而不是列号

这应该可以,但是与您的预期结果不符

paste f1 f2 | 
awk -F'\t' 'NR==1 {n=NF/2} 
                  {for(i=1;i<=n;i++) 
                     if($i!=$(i+n)) 
                       {c=c s i; s=","} 
                   if(c) 
                     {print "Line No. " NR-1 " COLUMN NO " c;
                      c="";s=""}}'

Line No. 2 COLUMN NO 4,5
Line No. 3 COLUMN NO 1
Line No. 4 COLUMN NO 3,5
Line No. 6 COLUMN NO 1,2,3,4,5
Line No. 7 COLUMN NO 1,2,3,4,5

您不是逐行比较,还是遵循其他一些未编写的规范。

暂无
暂无

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

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