使用unixshell脚本比较两个顺序不同的大文件
我有两个文本文件,每个文件大小为3.5GB,我想使用Unix脚本进行比较。这些文件中包含大约500万条记录 文件的布局如下所示使用unixshell脚本比较两个顺序不同的大文件,shell,unix,informatica-powercenter,Shell,Unix,Informatica Powercenter,我有两个文本文件,每个文件大小为3.5GB,我想使用Unix脚本进行比较。这些文件中包含大约500万条记录 文件的布局如下所示 *<sysdate> <Agent Name 1> <Agent Address 1> <Agent Address 2> <Agent Address 3> ... <Agent Name 2> <Agent Address 1> <Agent Address 2> <
*<sysdate>
<Agent Name 1>
<Agent Address 1>
<Agent Address 2>
<Agent Address 3>
...
<Agent Name 2>
<Agent Address 1>
<Agent Address 2>
<Agent Address 3>
...
<Total number of records present>*
示例文件
<sysdate>
Sachin Tendulkar 11051973 M
AddrID1 AddrLn11 AddrLn12 City1 State1 Country1 Phn1 OffcAddr11 OffcAddr12 St1 Cntry1
AddrID2 AddrLn21 AddrLn22 City2 State2 Country2 Phn2 OffcAddr21 OffcAddr22 St2 Cntry2
...
Sourav Ganguly 04221975 M
AddrID1 AddrLn11 AddrLn12 City1 State1 Country1 Phn1 OffcAddr11 OffcAddr12 St1 Cntry1
AddrID2 AddrLn21 AddrLn22 City2 State2 Country2 Phn2 OffcAddr21 OffcAddr22 St2 Cntry2
...
<Total number of records present>
两个文件中代理地址的顺序不同。我需要找到一个文件中存在但另一个文件中不存在的记录,以及不匹配的记录。我最初尝试使用Unix sort命令对文件进行排序,但由于服务器空间问题,排序失败。也可以考虑ETL Informatica方法
任何帮助都将不胜感激您可以使用awk,并在每次匹配代理名称时开始写入新文件,并使用前三个字符在subdir中为该文件指定代理的名称。接下来比较两个输入文件diff-r中的目录树。
另一种解决方案是导入两个不同表中的所有记录,并使用sql进行比较:
select name from table1 where name not in (select name from table2);
select name from table2 where name not in (select name from table1);
select name from table1
inner join table2 on table1.name=table2.name
where table1.address1 <> table2.address1
or table1.address2 <> table2.address2
...
在informatica中,加载两个文件 通过连接每一列来查找每一行的MD5,例如: MD5COL1 | | Col2 | | COL3
现在使用joiner比较每个文件中的两个MD5值,通过这种方式可以找到匹配行和不匹配行。首先,发送第二个文件的示例 为什么不能使用分拣机转换对数据进行分拣 我的方法是连接前3列名称addres1、addres2并将其作为键,然后使用joiner转换来匹配数据 您还可以执行联合转换,然后执行聚合器转换以计算找到您创建的密钥的次数 如果计数等于2,则表示数据在两个文件中 如果计数等于1,则表示数据仅在1个文件中
发送有关问题的详细信息,使其更具体首先尝试重新构造数据 不断向与该代理相关的每个地址添加AgentName和其他字段。使用简单复杂的表达式逻辑,如变量/计数方法来实现这一点。通过这样做,您的平面文件将比较友好&可以在UNIX或Informatica中轻松进行比较
如果您对该解决方案感兴趣,请告诉我,这将为您提供更多帮助。请发布两个文件的示例,并提供预期输出,清楚显示何时存在匹配或未命中,即,您是否只需要存在/不存在的代理名称,或者不同的地址是否决定了这一点。示例文件已添加。一个是好文件,另一个是错误文件。代理将以相同的顺序出现在两个文件中,但每个代理中的地址顺序不同。错配情况:1。第一个文件可能比第二个文件多几个代理。2.第一个文件在单个代理中可能还有几个地址。也可能有重复的地址ID。3.相同的地址ID在两个文件中可能具有不同的地址行。我需要通过删除错误文件中出现的所有不匹配,使两个文件完全相同。