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.