Você pode adicionar uma variável, por exemplo user
quando chegar à linha user:
. portanto
se for , imprima uma nova linha antes do nome do usuário, senão, e pule a impressão da nova linha em time_last_login
.
Se um ou mais campos estiverem faltando, você provavelmente usaria um array e imprimiria após cada iteração do usuário e adicionaria um END{}
para o último.
Dessa forma, você pode imprimir, por exemplo N/A
para campos ausentes.
Como alternativa, use uma matriz para especificar quais campos você deseja imprimir.
Exemplo (com ambos):
function prnt_user_data(arr, prnt) {
printf("\nAlternative 1:\n")
for (p in prnt) {
printf("%s ", prnt[p] in arr ? arr[prnt[p]] : "N/A")
}
printf("\nAlternative 2:\n")
printf(\
"%s %s %s %s\n",
"user" in arr ? arr["user"] : "N/A",
"su" in arr ? arr["su"] : "N/A",
"account_locked" in arr ? arr["account_locked"] : "N/A",
"time_last_login" in arr ? arr["time_last_login"] : "N/A" \
);
delete arr;
}
BEGIN {
FS="=|[ \t]*"
prnt_flds["01"]="user";
prnt_flds["02"]="su";
prnt_flds["03"]="account_locked";
prnt_flds["04"]="time_last_login";
}
NF == 0 {next}
NF == 3 {
user_data[$2]=$3;
}
NF == 1 && /:[ ]*$/{
if("user" in user_data)
prnt_user_data(user_data, prnt_flds)
user_data["user"]=substr($1, 1, length($1) - 1);
}
END {
if("user" in user_data)
prnt_user_data(user_data, prnt_flds)
}