100% Free Forever
AI-Powered Learning
Industry Expert Content
Certificates & Badges
Learn At Your Own Pace
Programming

Formatted Output with printf

Use AWK's printf statement to control field width, alignment, and numeric precision, producing aligned tables and reports that the plain print statement cannot.

Text ProcessingIntermediate9 min readJul 10, 2026
Analogies

Why printf Matters in AWK

AWK's print statement is convenient but gives you little control over spacing, alignment, or numeric formatting. printf, borrowed from C, lets you supply an exact format string with placeholders, producing aligned columns, fixed decimal places, and padded fields. Whenever output must look like a report rather than a raw dump, printf is the right tool.

🏏

Cricket analogy: Like a scoreboard operator who aligns every batsman's runs, balls, and strike rate into neat columns rather than just shouting the totals, printf enforces that column discipline.

Format Specifiers

The format string uses % specifiers to mark where values go: %s for strings, %d for integers, %f for floating point, %e for scientific notation, %o for octal, %x for hexadecimal, %c for a character, and %% for a literal percent sign. Each specifier consumes one argument, in order. Crucially, unlike print, printf never appends a newline automatically, so you must include \n yourself wherever a line should end.

🏏

Cricket analogy: Like a commentator's template 'that is %s, on %d off %d balls', where %s takes the name and each %d takes the next number, filling slots in strict order.

awk
# Each specifier consumes one argument, in order; \n ends the line
printf "%s scored %d runs\n", "Kohli", 82

# Combine several values, including a literal percent sign
printf "%-10s %5.2f%%\n", "CPU", 37.5
# -> CPU        37.50%

Width, Precision, and Flags

Between the % and the conversion letter you can insert a width and precision: %10s right-justifies a string in a ten-character field, %-10s left-justifies it, %8.2f prints a float eight characters wide with two decimals, and %05d pads an integer to five digits with leading zeros. The minus flag left-justifies, the zero flag zero-pads, and the plus flag forces an explicit sign. These modifiers are what turn ragged output into aligned tables.

🏏

Cricket analogy: Like reserving exactly ten characters for each name so a short 'Root' and a long 'Bumrah' still line up in the same column, %10s fixes the field width.

awk
BEGIN {
    printf "%-15s %8s %6s\n", "Name", "Salary", "Age"
    printf "%-15s %8.2f %6d\n", "Alice", 54200.5, 30
    printf "%-15s %8.2f %6d\n", "Bob",   48000,   45
}
# Name             Salary    Age
# Alice          54200.50     30
# Bob            48000.00     45

Provide exactly as many arguments as there are conversion specifiers. In AWK, any extra arguments beyond the last specifier are ignored, and any missing arguments are treated as 0 for numeric specifiers or an empty string for %s. The format string is used once per printf call and is not cycled over surplus arguments.

printf vs print

Because printf never adds a newline, forgetting \n concatenates all output onto one line, which is the single most common beginner bug. That same behavior is a feature when you want to build a line incrementally, emit a progress indicator, or assemble delimited output field by field. Use print for quick, throwaway dumps; reach for printf whenever the exact layout of the output actually matters.

🏏

Cricket analogy: Like a scorer who forgets to start a new over so every ball's entry runs together, the missing \n is that forgotten line break that jams output onto one line.

printf does not add a trailing newline the way print does. Always include \n explicitly at the end of each logical line, or every value your program emits will run together on a single unbroken line.

  • printf gives precise control over width, alignment, and numeric precision that print cannot.
  • Common specifiers: %s string, %d integer, %f float, %e scientific, %x hex, %c char, %% literal percent.
  • Each specifier consumes one argument, in order, and printf never appends a newline.
  • Width and precision like %8.2f and %-10s create aligned, tabular output.
  • %05d zero-pads a number; the minus flag left-justifies, the plus flag forces a sign.
  • Extra arguments are ignored; missing ones default to 0 or an empty string.
  • Always add \n yourself, or output concatenates onto one line.

Practice what you learned

Was this page helpful?

Topics covered

#Programming#AWKStudyNotes#FormattedOutputWithPrintf#Formatted#Output#Printf#Matters#StudyNotes#SkillVeris#ExamPrep