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?
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?
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 ;
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
5s
mean in awk {'printf ("%5s\t%s\n", $5, $1)'}
– Vishal
Oct 15 '19 at 13:06
Another awk-specific technique, use the "output field separator"
ls -la | awk -v OFS='\t' '{print $5, $1}'
The comma is crucial here.
\r
characters at your end-of line.
– glenn jackman
Sep 28 '21 at 13:15
print $0
to print all fields with the OFS
separator, so for such a need we can use column
: ... | column -s ' ' -t
– 4wk_
Apr 03 '23 at 09:36
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}'
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
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.
for i in ls; do $i
).
– mchid
Nov 05 '19 at 18:15
ls
. This will bite you in the back sooner or later. – gniourf_gniourf Dec 23 '12 at 10:08print $5 $1
– glenn jackman Dec 23 '12 at 12:31awk {'print $5 $1'} a.txt
). They're asking how to put a space in between field #1 and field #5. – kos Apr 11 '16 at 17:49