我在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完成吗?
答案 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
是多么渴望,但我怀疑它会眨眼。