簡體   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