我需要使用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
列是制表符分隔的。
答案 0 :(得分:0)
这是相当粗略的编码,但显示了一种使用awk
发出你想要的东西的方法,并且可以处理相同" schema"的文件。 - 不仅仅是您作为测试提供的特定4字段文件。
此方法使用pr
对文件进行简单合并:连接每个输入文件的同一行以向awk
脚本提供一行。
awk
脚本假设是干净的输入,并使用以下事实:如果变量n
的值为2,则脚本中$n
的值与{{{1}相同1}}。因此,该脚本使用$2
和i
变量遍历成对的字段。对于测试输入,将处理字段1和5,然后处理2和6等。
仅对输入进行非常有限的测试:主要是两个输入文件的隐含模式(列/字段的名称)相同。
j
在Linux上测试:GNU Awk 4.1.0和pr(GNU coreutils)8.21。