====== Awk ====== --- http://www.linuxnix.com/awk-scripting-8-awk-printf-statements-examples/ Syntax: awk '{printf "format", Arguments}' filename For example you want to print decimal values of column 3 then the example will be. awk '{printf "%d", $3}' example.txt Printf can do two things which AWK print command can’t - Defining type of Data. - Padding between columns. AWK printf supported data types The printf can be useful when specifying data type such as integer, decimal, octal etc. Below are the list of some data types which are available in AWK. %i or d --Decimal %o --Octal %x --hex %c --ASCII number character %s --String %f --floating number Note: Make sure that you pass exact data types when using corresponding formats as shown below. If you pass a string to a decimal formatting, it will print just zero instead of that string. Lets start with some examples. for this post our test file contents are Jones 21 78 84 77 Gondrol 23 56 58 45 RinRao 25 21 38 37 Edwin 25 87 97 95 Dayan 24 55 30 47 Example 1: Print first column values from db.txt file. awk '{printf "%sn", $1}' db.txt Output: Jones Gondrol RinRao Edwin Dayan Note: printf will not have default new line char, so you have to include tat when ever you execute printf command as shown above. Example 2: Try printing a string with decimal format and see the difference. awk '{printf "%dn", $1}' db.txt Output: 0 0 0 0 0 So be careful when dealing with different data types. Padding between columns using AWK printf Let us explore the formatting the column’s available with printf statements. Types of formatting: We can format the columns to specify number of chars each column can use. We have following padding formats available with printf statement. -n --Pad n spaces on right hand side of a column. n --Pad n spaces on left hand side of a column. .m --Add zeros on left side. -n.m --Pad n spaces right hand side and add m zeros before that number. n.m --Pad n spaces left hand side and add m zeros before that. Let us start exploring above mention padding’s with examples in detail. Example4: Pad 5 spaces on right hand side of each column. With out padding awk '{printf "%d%d%dn", $2,$3,$4}' db.txt Output: 217884 235658 252138 258797 245530 With padding 5 spaces on right hand side: awk '{printf "%-5d%-5d%-5dn", $2,$3,$4}' db.txt Output: 21 78 84 23 56 58 25 21 38 25 87 97 24 55 30 Note: As for understanding purpose we given this example with padding and without padding. We will add “|” between columnts output so that that padding can be clearly seen as show in below example. awk '{printf "|%-5d|%-5d|%-5d|n", $2,$3,$4}' db.txt Output: |21 |78 |84 | |23 |56 |58 | |25 |21 |38 | |25 |87 |97 | |24 |55 |30 | Example 5: Pad 5 spaces on left hand side of each column. awk '{printf "|%5d|%5d|%5d|n", $2,$3,$4}' db.txt Output: | 21| 78| 84| | 23| 56| 58| | 25| 21| 38| | 25| 87| 97| | 24| 55| 30| Example 6: add zero’s on left hand side of each column element make it a 5 digit number. awk '{printf "|%.5d|%.5d|%.5d|n", $2,$3,$4}' db.txt Output: |00021|00078|00084| |00023|00056|00058| |00025|00021|00038| |00025|00087|00097| |00024|00055|00030| Example 7: Make the column element with 4 digit’s and 7 in length and print the number to left hand side. awk '{printf "|%-7.4d|%-7.4d|%-7.4d|n", $2,$3,$4}' db.txt Output: |0021 |0078 |0084 | |0023 |0056 |0058 | |0025 |0021 |0038 | |0025 |0087 |0097 | |0024 |0055 |0030 | Example 8: Make the column element with 4 digit’s and 7 in length and print the number to right hand side. awk '{printf "|%7.4d|%7.4d|%7.4d|n", $2,$3,$4}' db.txt Output: | 0021| 0078| 0084| | 0023| 0056| 0058| | 0025| 0021| 0038| | 0025| 0087| 0097| | 0024| 0055| 0030| Hope these examples help you to understand about formatting output and padding using printf statement in AWK scripting. Keep visiting www.linuxnix.com for more scripting tutorials and tips. Réaliser une addtion sur une colonne avec AWK ps -u www-data -o user,size | sed 1d | awk '{ SUM += $2 } END { print $1" " SUM }'