Usando awk :
awk 'BEGIN { r = "true" } NR == 1 { n = NF; next } NF != n { r = "false"; n = "N/A"; exit } END { printf("status=%s count=%s\n", r, n) }' somefilename
Ou como um script awk :
#!/usr/bin/awk -f
BEGIN { r = "true" }
NR == 1 { n = NF; next }
NF != n { r = "false"; n = "N/A"; exit }
END { printf("status=%s count=%s\n", r, n) }
O script começará com r (como em "resultado") para true (estamos assumindo que será verdadeiro em vez de falso). Em seguida, ele inicializa n (como em "número") para o número de campos da primeira linha.
Se qualquer uma das outras linhas nos dados de entrada tiver um número diferente de campos, r será definido como false e n será definido como N/A e o script sairá (por meio do bloco END ).
No final, os valores atuais de r e n são impressos.
A saída deste script será algo como
status=true count=5
ou
status=false count=N/A
Isso pode ser usado com export ou bash declare ou eval :
declare $( awk '...' somefilename )
Isso criaria a variável de shell count e status , e elas estariam disponíveis no shell de chamada.