헤더의 레코드 수 확인

헤더의 레코드 수 확인

Record_count총 상세 레코드가 헤더 레코드 와 동일한지 확인하고 그렇지 않으면 오류를 발생시키는 스크립트를 작성하려고 합니다.

견본

0001  HD  SAP _AP Distribution  20150615  131723  000003  00000003   

detail record 1
detail record 2
detail record 3

제목 00000003은 레코드 수입니다.

답변1

사용awk

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

또는 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

시작 스크립트:

<script_name> <data_file>

% 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

답변2

단축된 awk스크립트는 귀하의 예와 정확히 같은 입력 형식을 기대합니다(단지 첫 번째 행의 9번째 필드에 포함된 숫자를 총 행 수에서 2를 뺀 숫자와 비교함).

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

관련 정보