valida a contagem de registros no cabeçalho

0

Eu estou tentando escrever um script que deve verificar o total de registros de detalhes igual ao Record_count no registro de cabeçalho, se não lançar um erro

dados de amostra

0001  HD  SAP _AP Distribution  20150615  131723  000003  00000003   

detail record 1
detail record 2
detail record 3

No cabeçalho 00000003 é a contagem de registros

    
por user86683 27.06.2015 / 20:17

2 respostas

4

Usando awk

awk '! /^detail/ && /.+/ {max=$9} /^detail record/ {count++} END {if (max == count) { print "ok, "max" = "count} else { print "not ok, "max" != "count }}' foo

Ou como script bash

#!/bin/bash
retValue=$(awk '! /^detail/ && /.+/ {max=$9} /^detail record/ {count++} END {if (max != count) { print "1" }}' "$1")

if [[ "$retValue" -eq 1 ]]; then
    exit 1
fi

exit 0

Inicie o script com:

<script_name> <data_file>

Exemplo

% cat foo                                                                    
0001  HD  SAP _AP Distribution  20150615  131723  000003  00000003   

detail record 1
detail record 2
detail record 3

% awk '! /^detail/ && /.+/ {max=$9} /^detail record/ {count++} END {if (max == count) { print "ok, "max" = "count} else { print "not ok, "max" != "count }}' foo
ok, 00000003 = 3

% cat bar
0001  HD  SAP _AP Distribution  20150615  131723  000003  00000004   

detail record 1
detail record 2
detail record 3

% awk '! /^detail/ && /.+/ {max=$9} /^detail record/ {count++} END {if (max == count) { print "ok, "max" = "count} else { print "not ok, "max" != "count }}' bar
not ok, 00000004 != 3
    
por 27.06.2015 / 21:25
2

Script awk abreviado que espera uma entrada formatada exatamente como seu exemplo (ele [simplesmente] compara o número contido no 9º campo da primeira linha com o número total de linhas menos dois):

< in awk 'NR==1 {c=$9} END {if (c==FNR-2) print "ok"; else print "ko"}'
    
por 27.06.2015 / 23:22