Would make sense if you knew a li’l bit about awk. Anyways what happens here is that the * is replaced by the numbers you’ve given (-5 and 4 respectively), which means
printf(“%*.*s”,-5, 4, s+3);
would change to
printf(“%-5.4s”, s+3);
0
solved Need to understand printf functioning deeply