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

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

While playing with awk I came to execute:

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

This is giving output like:

53277-rw-------
52347-rw-------

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

share|improve this question
1  
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  
Possible duplicate of How do I select a field/column from the output of `ls -l`? – kenorb Apr 10 at 4:28
1  
@kenorb and close voters, the linked duplicate is not a duplicate at all. They know already how to print fields by premise (awk {'print $5 $1'} a.txt). They're asking how to put a space in between field #1 and field #5. – kos Apr 11 at 17:49
up vote 18 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.

Edit:

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
1  
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 '15 at 16:33

To place the space between the arguments, just add " ", e.g. awk {'print $5" "$1'}.

However it is not recommended to parse output of ls command, since it's not reliable and output is for humans, not scripts. Therefore use alternative commands such as find or stat.

Here is example using GNU stat:

$ stat -t *
001.txt 23 8 81a4 501 20 1000004 242236402 1 0 0 1460260387 1460260239 1460260239 1460260194 4096
7c1c.txt 21 8 81a4 501 20 1000004 242236595 1 0 0 1460261322 1460260486 1460260486 1460260486 4096

which will print you machine-friendly output (in terse form), so you can get exactly what you need. Then use -c to use specific format, or use awk, cut or read to get the right columns.

Check stat --help for further options. For example to print day of modification, check this example.

share|improve this answer

Your Answer

 
discard

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.