temos que imprimir apenas as entradas antigas Delta (Diferença) no Arquivo-1 e no Arquivo-2. recém-adicionado entra em arquivos-1 sem necessidade de imprimir.
no meu servidor unix, todos os dias o novo relatório é extraído do sistema, mais tarde comparado com o relatório de ontem.
As linhas adicionadas recentemente no relatório do dia atual são impressas por lógica separada, o que funciona perfeitamente.
Agora, meu requisito é identificar os campos (por US $ 2, cheque modificado, US $ 4). Esses são atualizados no relatório de hoje, após a comparação com o relatório de ontem. Portanto, a lógica deve ser executada para verificar $ 2 linha por linha para descobrir $ 4 campos atualizados do Arquivo1 e imprimir o mesmo.
Eu tenho a lógica NR = FNR para fazer isso, mas não funciona para o caso abaixo
/usr/xpg4/bin/awk -F'!' 'NR==FNR{++a[$2,$4];next} !a[$2,$4]++ || NR==FNR{++a[$4];hold} a[$4]++' file-1 file-2
no entanto, esta nova lógica tem falhado na combinação de campos abaixo,
arquivo-novo
7! J9AA-50! LHR! 35!
7! J9AA-50! LHR! 34!
8! J9BB-50! LHW! 22!
8! J9BB-50! LHW! 22!
7! test3! test3! 8!
7! test3! test3! 8!
7! JWZZ-50! LHN! 15!
7! J9AA-50! LHR! 34!
8! J9BB-50! LHW! 21!
Arquivo antigo
7! J9AA-50! LHR! 34!
7! J9AA-50! LHR! 34!
8! J9BB-50! LHW! 22!
8! J9BB-50! LHW! 22!
7! test3! test3! 8!
7! test3! test3! 8!
7! JWZZ-50! LHN! 14!
7! J9AA-50! LHR! 34!
8! J9BB-50! LHW! 21!
com novo comando para comparar e imprimir. abaixo da lógica falham ao imprimir o resultado esperado,
/usr/xpg4/bin/awk -F'!' 'NR==FNR{++a[$2,$4];next} !a[$2,$4]++ || NR==FNR{++a[$4];hold} a[$4]++' File-New File-Old
este comando está imprimindo desnecessariamente as linhas 7! J9AA-50! LHR! 34! 8! J9BB-50! LHW! 22! & 7! test3! test3! 8!
Resultado atual,
7! J9AA-50! LHR! 34!
8! J9BB-50! LHW! 22!
7! test3! test3! 8!
7! JWZZ-50! LHN! 14!
7! J9AA-50! LHR! 34!
Resultado esperado:
7! J9AA-50! LHR! 34!
7! JWZZ-50! LHN! 14!
temos que imprimir os campos atualizados de arquivos antigos (por US $ 2 cheque modificados em US $ 4), que são atualizados no novo relatório de hoje. so A lógica tem que se tornar $ 2 de File-Old em File-new se $ 2 estiver presente em File-New e então comparados os respectivos $ 4, se $ 4 for atualizado então imprima essa linha de File-Old.
alguém pode sugerir as alterações / lógica nova para obter a saída esperada. se não for possível usando NR = FNR, então como podemos obtê-lo usando o script shell / perl?