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.
# 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.
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 45Provide 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
1. What does printf add automatically at the end of its output?
2. Which specifier prints a floating-point number two decimals wide within an eight-character field?
3. What does the specifier %-10s do?
4. How do you print a literal percent sign in a printf format string?
5. What does printf produce for the format %05d applied to the value 42?
Was this page helpful?
You May Also Like
String Functions in AWK
Explore AWK's built-in string functions — length, substr, index, split, sub, gsub, match, sprintf, and case conversion — for extracting, searching, and transforming text.
AWK Scripting for Report Generation
Using AWK's BEGIN/END blocks, printf formatting, and associative arrays to turn raw tabular data into clean, aligned, human-readable reports.
Math Functions in AWK
Explore AWK's built-in numeric functions — sqrt, exp, log, sin, cos, atan2, int, rand, and srand — and the idioms for rounding, other-base logarithms, degree-based trig, and reproducible randomness.
Related Reading
Related Study Notes in Programming
Browse all study notesApache Spark Study Notes
Programming · 30 topics
ProgrammingApache Flink Study Notes
Programming · 30 topics
ProgrammingHadoop Study Notes
Programming · 30 topics
ProgrammingSnowflake Study Notes
Programming · 30 topics
ProgrammingApache Airflow Study Notes
Programming · 30 topics
Programmingdbt (Data Build Tool) Study Notes
Programming · 30 topics