在Unix中逐字段比较两个文件

时间:2016-06-21 17:47:59

标签: unix awk

我在Unix中有两个非常大的文件,每个文件包含5列但数百万行。

前:

文件1: ABC | DEF | GHK | IJK | LMN .... ...

File2: ABC | DEF | GHK | IJK | 123 ... ...

我的任务是比较两个大文件,找出不同的列和行。例如,输出将是: Column-no Row-no File1-word File2-word。

前:

5 1 lmn 123

文件非常大。我听说awk是在Unix中进行文件解析的最快方法。由于输出不能等待太久。

可以使用awk完成吗?

1 个答案:

答案 0 :(得分:2)

paste/awk解决方案

$ paste -d'|' file1 file2 | 
  awk -F'|' '{w=NF/2; 
              for(i=1;i<=w;i++) 
                 if($i!=$(i+w)) printf "%d %d %s %s", NR,i,$i,$(i+w); 
              print ""}'

1 5 lmn 123

我更改了订单,我首先打印行号然后打印字段号更有意义,但是您可以轻松更改它...

一旦粘贴匹配来自两个文件的行,则返回上半部分(第一个文件)的字段并与后半部分(第二个文件)进行比较并打印差异。 awk具有覆盖所有记录(行)的隐式循环。我没有用大文件测试过这个问题,但对于awk部分它并不重要(按记录记录)。我不确定paste是多么渴望,但我怀疑它会眨眼。