Arrays 按列逐行匹配两个文件-无键

Arrays 按列逐行匹配两个文件-无键,arrays,awk,Arrays,Awk,我有两个80000多条记录的大文件,长度相同。我需要按文件的前8个字符逐行比较这两个文件。将文件一的第一行与文件二的第一行进行比较。将文件一的第二行与文件二的第二行进行比较 示例文件1 01234567blah blah1 11234567blah blah2 21234567blah blah3 31234567blah blah4 示例文件2 31234567blah nomatch 11234567matchme2 21234567matchme3 31234567matchme4 第

我有两个80000多条记录的大文件,长度相同。我需要按文件的前8个字符逐行比较这两个文件。将文件一的第一行与文件二的第一行进行比较。将文件一的第二行与文件二的第二行进行比较

示例文件1

01234567blah blah1
11234567blah blah2
21234567blah blah3
31234567blah blah4
示例文件2

31234567blah nomatch
11234567matchme2
21234567matchme3
31234567matchme4
第2-4行应该匹配,但第1行不应该匹配。我的脚本匹配第1行到第4行,但应该仅与第1行进行比较

awk '                                                        
FNR==NR {                                                  
a[substr($0,1,8)]=1;next                                       
        }                                                              
{if (a[substr($0,1,8)])print $0; else print "Not Found", $0;} 
'  $inputfile1  $inputfile2     >  $outputfile1               

谢谢。

对于逐行比较,您需要使用
FNR
变量作为键。尝试:

awk 'NR==FNR{a[FNR]=substr($1,1,8);next}{print (a[FNR]==substr($1,1,8)?$0:"Not Found")}' file1 file2
Not Found
11234567matchme2
21234567matchme3
31234567matchme4

如果两个文件中都没有一个字符,您可以将其用作分隔符,如示例中的
,以及
粘贴
/
awk
组合,如:

paste -d: data data2 | awk -F: '{prefix=substr($1,1,8)!=substr($2,1,8) ? "Not Found"OFS : ""; print prefix $2}'
  • “粘贴”使用分隔符将每个文件中的相应行合并为一行
  • awk使用
    分隔符
  • awk在每个字段的前8个字符上测试匹配,并创建
    前缀
  • awk打印出前缀为
    的每一行,当它们不匹配时,“找不到”(++
    OFS
Not Found 31234567blah nomatch
11234567matchme2
21234567matchme3
31234567matchme4
paste -d: data data2 | awk -F: '{prefix=substr($1,1,8)!=substr($2,1,8) ? "Not Found"OFS : ""; print prefix $2}'