проверять количество записей в заголовке

Я пытаюсь написать сценарий, который должен проверять полные записи подробностей, равные Record_count в записи заголовка, если не Record_count ошибку

Пример данных

 0001 HD SAP _AP Distribution 20150615 131723 000003 00000003 detail record 1 detail record 2 detail record 3 

В заголовке 00000003 указано количество записей

Использование awk

 awk '! /^detail/ && /.+/ {max=$9} /^detail record/ {count++} END {if (max == count) { print "ok, "max" = "count} else { print "not ok, "max" != "count }}' foo 

Или как скрипт bash

 #!/bin/bash retValue=$(awk '! /^detail/ && /.+/ {max=$9} /^detail record/ {count++} END {if (max != count) { print "1" }}' "$1") if [[ "$retValue" -eq 1 ]]; then exit 1 fi exit 0 

Запустите скрипт с помощью:

 <script_name> <data_file> 

пример

 % cat foo 0001 HD SAP _AP Distribution 20150615 131723 000003 00000003 detail record 1 detail record 2 detail record 3 % awk '! /^detail/ && /.+/ {max=$9} /^detail record/ {count++} END {if (max == count) { print "ok, "max" = "count} else { print "not ok, "max" != "count }}' foo ok, 00000003 = 3 % cat bar 0001 HD SAP _AP Distribution 20150615 131723 000003 00000004 detail record 1 detail record 2 detail record 3 % awk '! /^detail/ && /.+/ {max=$9} /^detail record/ {count++} END {if (max == count) { print "ok, "max" = "count} else { print "not ok, "max" != "count }}' bar not ok, 00000004 != 3 

Сокращенный awk скрипт, ожидающий ввода, отформатированного точно так же, как ваш пример (он [просто] сравнивает число, содержащееся в 9-м поле первой строки, против общего количества строк минус два):

 < in awk 'NR==1 {c=$9} END {if (c==FNR-2) print "ok"; else print "ko"}'