트레일러 레코드 수 확인

트레일러 레코드 수 확인

형식의 트레일러 레코드가 있습니다 TRL 4 93084.00(처음 3개 위치는 내 위치 record_type, 4~11위는 내 위치 record_count(길이는 8), 12~28위는 내 위치) record_amt.

파일의 레코드 개수 합계가 record_count트레일러 레코드의 값과 일치하는지 어떻게 확인합니까?

내 입력 파일은 다음과 같습니다.

HDR9185        20210601094001202105311.11j        
DTL226-42752-11                       100.499185        NM30100000115006     
DTL210-86995-19                        92.479185        NM30100000115030     
TRL 4         93084.00

암호:

if awk '$1 ~ /^HDR/ { h++ } $1 ~ /^DTL/ { d++ } $1 == "TRL" { t++; ok = ( d == substr($0,4,8) ) } END { exit !(h == 1 && t == 1 && ok) }' sample.txt

위 코드를 사용할 때 내 개수는 4이고 예고편 개수 4와 일치하지만 올바르게 유효성을 검사하지 못합니다. (간격 문제가 Record_count 필드의 8자 길이를 처리할 수 있는지 확실하지 않으며 필드의 나머지 값은 공백으로 간주되는 1자 "4"입니다.)

내 코드 고치는 걸 도와줄 수 있어?

답변1

좋아요

awk '
{
    ok += /^HDR/
    t += /^TRL/
}

t == 1 && ok == 1 {
    ok = int(substr($0, 4)) == FNR
}

ok != 1 || t > 1 {
    exit
}

END {
    exit ! (ok == 1 && t == 1)
}' file

관련 정보