Сравнение двух больших файлов разного порядка с помощью сценария оболочки Unix - PullRequest
0 голосов
/ 19 мая 2018

У меня есть два текстовых файла размером 3,5 ГБ каждый, которые я хочу сравнить с помощью сценария Unix.Файлы содержат около 5 миллионов записей.

Расположение файлов выглядит следующим образом.

*<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, но это не удалось из-за проблемы с пространством на сервере.Подход ETL (Informatica) также может быть рассмотрен.

Любая помощь будет признательна

Ответы [ 4 ]

0 голосов
/ 24 мая 2018

Попробуйте сначала реструктурировать свои данные.

Продолжайте добавлять AgentName и другие поля к каждому адресу, связанному с этим агентом.Используйте для этого простую логику хитрых выражений, например, методологию переменной / подсчета.Благодаря этому ваши плоские файлы будут удобны для сравнения и могут быть легко сопоставлены в UNIX или Informatica.

Дайте мне знать, если вы заинтересованы в этом решении, это поможет вам больше.

0 голосов
/ 22 мая 2018

В Informatica загрузите оба файла.

найдите MD5 каждой строки путем объединения каждого столбца, например: MD5 (COL1 || Col2 || COL3)

Теперь сравните обаЗначения MD5 из каждого файла с помощью Joiner, таким образом, вы можете найти совпадающие и несовпадающие строки.

0 голосов
/ 22 мая 2018

сначала отправьте пример 2-го файла

почему вы не можете отсортировать данные с помощью преобразования сортировки?

мое приложение будет объединять первые 3 столбца (name, addres1), addres2) и сделайте его ключом, затем используйте преобразование столярного соединения для сопоставления данных.

вы также можете выполнить преобразование объединения, а после этого преобразование агрегатора, чтобы подсчитать, сколько раз найденный вами ключ найден.если счет равен 2, означает, что данные находятся в обоих файлах, если счет равен 1, означает, что данные находятся всего в 1 файле

отправить более подробную информацию о проблеме, чтобы быть более конкретной

0 голосов
/ 19 мая 2018

Вы можете использовать awk и начинать запись в новый файл каждый раз, когда вы соответствуете Agent Name, и присваивать этому файлу имя агента (perkaps в 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
   ...
...