[英]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.