형식의 트레일러 레코드가 있습니다 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