Sign up ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free.

While playing with awk I came to execute:

ls -la >> a.txt ; awk {'print $5  $1'} a.txt ;

This is giving output like:


How can I get a space between these two friends of output?

share|improve this question
As an advice, you should not parse the output of ls. This will bite you in the back sooner or later. – gniourf_gniourf Dec 23 '12 at 10:08
In awk, to concatenate two strings, you just place them side-by-side -- print $5 $1 – glenn jackman Dec 23 '12 at 12:31

3 Answers 3

up vote 15 down vote accepted

Just change the line to

ls -la >> a.txt ; awk {'print $5 "        " $1'} a.txt ;

this should print the output with spaces.

Hope this helps.


As suggested by McNisse you can use printf, which would provide you good output format

ls -la >> a.txt ; awk {'printf ("%5s\t%s\n", $5, $1)'} a.txt ;
share|improve this answer
The printf function provides better control, specially if you want to format numbers. printf("%s\t%s\n", $5, $1) – McNisse Dec 23 '12 at 10:11

Another awk-specific technique, use the "output field separator"

ls -la | awk -v OFS='\t' '{print $5, $1}'

The comma is crucial here.

share|improve this answer
thanks for the answer , its also working . – Raja Dec 23 '12 at 13:06

I know this is an old thread, but I'm just learning and found these posts helpful. My best solution was to use gawk to insert spaces between the variables for you.

ls -la | gawk '{print $1, $9}'
share|improve this answer
-1: Nothing new. gawk, mawk, or any other awk, they all insert spaces if you use the comma, which is what this answer says. – muru Sep 18 '14 at 23:19
Should be ls -la | awk '{print $1, $9}'. As muru said gawk isn't necessary. – Nick Crawford Aug 25 at 16:33

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.