验证预告片记录计数

验证预告片记录计数

我有一个格式的预告片记录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

相关内容