set flag para remover registros duplicados de um arquivo com base em alguns valores do registro

2

Eu tenho um arquivo com os seguintes registros (delimitado por pipe):

SK200-10|ALBUMIN-SK|INS|SEKURE ALBUMIN 2 X 65ML|REAG-IVD|SEKI-PEI|90|14IAG|KIDNEY/LIVER|MD|NA|0|U|MFGPRO|15-May-2014|15-May-2014|MFGPRO|CAPPROD
P/G-PPR|NA-INS|INS|GEWINDEFLASCHE +DECKEL ROT|NON-REAG|ZINSSER|0|NA|NA|NA|NON-REAG|0|U|DM|3-Jun-2014|3-Jun-2014|MFGPRO|UKPROD
P/G-PPR|NA-INS|INS|GEWINDEFLASCHE +DECKEL ROT|NON-REAG|ZINSSER|0|NA|NA|NA|NON-REAG|0|U|DM|3-Jun-2014|3-Jun-2014|DM|QADDB
2898|OTHER-RT|RT|PRINTED MEMBRANE, ADENOVIRUS|NON-REAG|SEKI-SD|60|NA|NA|NA|NA|0|U|MFGPRO|24-Apr-2013|24-Apr-2013|MFGPRO|PACEPROD

Nestes registros delimitados por pipe: O primeiro valor é o número do item. O 13º valor é o sinalizador de status. O último valor é o nome do banco de dados.

Verifique se há registros duplicados com base no número do item do banco de dados UKPROD e QADDB . Se uma duplicata for encontrada: Altere o valor do sinalizador de status (13º valor) para 'X' do banco de dados QADDB .

Por exemplo, nos 4 registros acima:

O número do item é o mesmo para o segundo e o terceiro registro. Em seguida, verifico se eles existem entre os bancos de dados UKPROD e QADDB . Se sim, eu marquei o sinalizador de status como 'X' para o registro do banco de dados QADDB .

    
por dhotearp 30.06.2014 / 11:11

1 resposta

1

Se a ordem das entradas UKPROD e QADDB para cada ID do produto não for corrigida, acho que você precisará ler e processar o arquivo duas vezes. Na primeira etapa, crie uma tabela de consulta de todos os produtos (campo # 1) no banco de dados UKPROD , e no segundo passo, verifique cada produto mostrado em relação a QADDB para presença em UKPROD . Por exemplo, uma possível solução em awk pode ser

awk -F\| '
BEGIN{OFS=FS}; 
NR==FNR {if ($NF=="UKPROD") ukprod[$1]++; next} 
NR!=FNR {if (ukprod[$1] && $NF=="QADDB") $13="X"} 
1' yourfile yourfile

mas provavelmente há implementações melhores. Se UKPROD e QADDB referirem-se a bancos de dados reais, talvez seja mais eficiente fazer uma consulta de banco de dados real em vez de processar o arquivo simples.

    
por 01.07.2014 / 14:32