在unix shell中逐列比较两个文件

时间:2018-04-04 18:24:46

标签: unix compare

我需要使用unix shell逐列比较两个文件,并将差异存储在结果文件中。

例如,如果第一个文件的第1个记录的第1列与第2个文件的第1个记录的第1列匹配,则结果将在结果文件中针对列存储为“=”,但如果找到列值的任何差异都需要在结果文件中打印。

以下是具体要求。

文件1:

id  code name  place 
123 abc  Tom   phoenix
345 xyz  Harry seattle
675 kyt  Romil newyork

文件2:

id  code name  place
123 pkt  Rosy  phoenix
345 xyz  Harry seattle
421 uty  Romil Sanjose

预期的结果文件:

id_1 id_2 code_1 code_2 name_1 name_2 place_1 place_2
=    =      abc  pkt     Tom    Rosy   =       =
=    =      =    =       =      =      =       =
675  421    kyt  uty     =      =      Newyork Sanjose

列是制表符分隔的。

1 个答案:

答案 0 :(得分:0)

这是相当粗略的编码,但显示了一种使用awk发出你想要的东西的方法,并且可以处理相同" schema"的文件。 - 不仅仅是您作为测试提供的特定4字段文件。

此方法使用pr对文件进行简单合并:连接每个输入文件的同一行以向awk脚本提供一行。

awk脚本假设是干净的输入,并使用以下事实:如果变量n的值为2,则脚本中$n的值与{{{1}相同1}}。因此,该脚本使用$2i变量遍历成对的字段。对于测试输入,将处理字段1和5,然后处理2和6等。

仅对输入进行非常有限的测试:主要是两个输入文件的隐含模式(列/字段的名称)相同。

j

在Linux上测试:GNU Awk 4.1.0和pr(GNU coreutils)8.21。