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