Field Separator in printf (awk)

Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Field Separator in printf (awk)
# 1  
Old 11-06-2013
Field Separator in printf (awk)

I can not figure out how to set the Output filed separator in awk when using printf.

cat file
some data
here_is_more information

Requested output

Here are some that does not work:
awk '{printf "%-15s %s\n",$1,$2}' OFS="-" file
some            data
here_is_more    information

awk '{printf "%-15s-%s\n",$1,$2}' file
some           -data
here_is_more   -information

# 2  
Old 11-06-2013
printf doesn't use OFS, just whatever you specify in the format string. You can explicitly supply OFS as a %s argument if you want though:
awk '{printf "%-15s%s%s\n",$1,OFS,$2}' OFS="-" file

# 3  
Old 11-06-2013
Supplementing CarloM's reply, here is something that can be found in the GNU awk's manual.

The difference between printf and print is the format argument. This is an expression whose value is taken as a string; it specifies how to output each of the other arguments.
The print statement separates the fields using the char determined by OFS, whereas, in printf the format is specified as a format string.
# 4  
Old 11-06-2013
This will just print one "-" and not fill the gaps.

Here is one solution that gives me correct output:
awk '{for (i=1;i<=(15-length($1));i++) s=s "-";printf "%s%s%s\n",$1,s,$2;s=""}' file

Last edited by Jotne; 11-06-2013 at 06:07 AM..
# 5  
Old 11-06-2013
In addition to what has already been said, you're not looking for a field separator, you're looking for a field fill character. There are several ways to do this, here are two:
awk '{printf("%s%s%s\n", $1, substr("---------------", length($1)), $2)}' file
awk '{printf("%16.16s%s\n", $1 "---------------", $2)}' file

Both of these assume that 1 <= length($1) <= 15.

Both produce the output:

when given your sample input.
These 2 Users Gave Thanks to Don Cragun For This Post:
# 6  
Old 11-06-2013

Simply one more approach for same, in spite of OFS used one variable.

awk -vs1="-------------------" -F" " '{printf"%-15s%s%15s\n",$1,s1,$2}' file_name

output will be as follows.

ome            -------------------           data
here_is_more   -------------------    information

R. Singh
# 7  
Old 11-06-2013
@RavinderSingh13 I do not want the blank spaces.
@Don Cargun Thanks for explication and for the good solution

Here is another way
awk '{v=sprintf("%-15s%s",$1,$2);gsub(/ /,"-",v);print v}' t

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

awk field separator not working

Hi, can some some help to get me the right results, I have few text files, need to grep few columns from each file and get the results in one row with comma separated. my code is #folder=/nz/kit/log/backupsvr folder=/export/home/nz/valai/tmpfiles/ echo $folder for entry in `ls... (4 Replies)
Discussion started by: ValaiG
4 Replies

2. Shell Programming and Scripting

awk field separator help -

Hi Experts , file : - How to construct the awk filed separator so that $1, $2 $3 , can be assigned to the each "" range. I am trying : awk -F"]" '{print $1}' but it is printing the entire file. Not first field. The desired output needed for first field... (9 Replies)
Discussion started by: rveri
9 Replies

3. Shell Programming and Scripting

awk field separator

I need to set awk field separator to ";", but I need to avoid ";EXT". so that echo a;b;c;EXTd;e;f | awk -F";" '{print $3}' would give "c;EXTd" (2 Replies)
Discussion started by: locoroco
2 Replies

4. UNIX for Dummies Questions & Answers

awk - output field separator

In awk, how do I print all fields with a specified output field separator? I have tried the following, which does not print the output FS: echo a b c d | awk 'BEGIN{OFS = ";"}{print $0}' (3 Replies)
Discussion started by: locoroco
3 Replies

5. Shell Programming and Scripting

awk - show field separator

I am using this code to insert something into a csv file: awk -F";" -v url=$url -v nr=$nr 'NR==nr{$2=url$2}1' file Why do I get the output field1 field2 instead of field1;field2 I have given -F";", so the field separator should surely be ";". (1 Reply)
Discussion started by: locoroco
1 Replies

6. Shell Programming and Scripting

awk, comma as field separator and text inside double quotes as a field.

Hi, all I need to get fields in a line that are separated by commas, some of the fields are enclosed with double quotes, and they are supposed to be treated as a single field even if there are commas inside the quotes. sample input: for this line, 5 fields are supposed to be extracted, they... (8 Replies)
Discussion started by: kevintse
8 Replies

7. Shell Programming and Scripting

awk (nawk) field separator

Hi; i have a file and i want to get; - If the last word in line 14 is NOT equal to "Set."; then print 2nd, 3rd, 4th and 5th values of 3rd line. and my code is: nawk 'NR==14 {if ($NF!="Set.") (NR==3{print $2,$3,$4,$5}) }' file.txt but no result?? :confused::(:confused::( (4 Replies)
Discussion started by: gc_sw
4 Replies

8. Shell Programming and Scripting

Field separator in awk

Hi I need to check if field separator I am using in awk statement is " : ", for example: TIME=12:59 HOUR=`echo "$TIME" | awk '{FS=":"; print $1}'` MINUTES=`echo "$TIME" | awk '{FS=":"; print $2}'` Is there a way to check within the above awk statement ? Thanks for help -A (2 Replies)
Discussion started by: aoussenko
2 Replies

9. UNIX for Dummies Questions & Answers

Can't figure out what field separator to use in awk....

Hi Friends, Scripting newb here. So I'm trying to create a geektool script that uses awk and printf to output certain fields from top (namely command, cpu%, rsize, pid and time, in that order). Here's the input from the top process that I'm putting into awk: PID COMMAND %CPU ... (3 Replies)
Discussion started by: thom.mattson
3 Replies

10. Shell Programming and Scripting

awk field separator or print command

Hello Experts, I am back, with another doubt. I am not sure what it relates to this time - awk or the print command actually. I'll explain the scenario: I have a huge file, and it has some traces(logs). In between those logs, there are statements with some SQL queries. All I want to do is... (4 Replies)
Discussion started by: hkansal
4 Replies
Login or Register to Ask a Question