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