トレーラーレコード数の確認

トレーラーレコード数の確認

形式のトレーラーレコードがあります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

関連情報