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