Gawk print

From wikinotes
Revision as of 01:23, 19 July 2021 by Will (talk | contribs) (Created page with "= print = <blockquote> Your basic print, like echo. Multiple items can be printed separated by a comma. They will be output with a space between them by default. $0 prints t...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

print

Your basic print, like echo.

Multiple items can be printed separated by a comma. They will be output with a space between them by default. $0 prints the entire submitted line

echo "hello" | awk '{$0,"goodbye"}' 
> hello goodbye


$1, $2, $3 etc. prints each entry separated by a token. The default token is a single space.

echo "one two three four" | awk '{print $1 $3}'
> one three

printf

By default, every print statement is converted to a string. printf allows you to control the output type, and the spacing of elements

%s    # string
%f    # floating point
%i    # integer
%E    # scientific notation
%4s   # string (padded to 4 characters)
%.4s  # string (max 4 characters, truncated if necessary)
echo "one two three" | awk '{ printf(   "%10s %5s %-10s %s",    $1,$2,$3,"\n"   ) }'
>          one     two three
printf statements must be encased in parentheses. The first section specifies the format.

--left alignment
%10s means that the first entry ($1 in this case) is a string and will have a 
'column' 10 characters wide from the start of the word.
ex: {one.......}

--right alignment
%-10s means that the entry ($3) will have a column 10 characters wide, but starting at the end of the word.
ex: {.....three}

--integer
you could also just as easily print an integer with:

echo "10.459" | awk '{ printf( "%i", $1) }'
> 10

sprintf

sprintf is syntactically identical to printf except that instead of printing to the standard output, it is designed to be printed to a variable.

echo "8.234" | awk '{var = sprintf("%f", $1); print var}'