You mean like this, just prepending the current directory to each filename?
ls -l | awk -v PWD=$PWD '{printf("%s %s/%s\n", $5, PWD, $9); }'
(the -v
just imports the $PWD
shell variable into the awk script).
Or something else?
OK, apparently what you want is
$ cd /some/path/to/somewhere
$ <insert command here>
somewhere/file1 size1
somewhere/file2 size2
...
Is that correct?
If so, the change you need is this:
ls -l | awk -v PWD=$(basename $PWD) '{printf("%s/%s %s\n", PWD, $9, $5); }'
If you have an older shell, the $()
may not work, in which case try:
ls -l | awk -v PWD=`basename $PWD` '{printf("%s/%s %s\n", PWD, $9, $5); }'
instead. I don't have immediate access to any shell that doesn't support $()
, but I can't think where else your Illegal variable name
error would come from, when this works for me.
If it still doesn't work, please describe your platform, shell, version of awk etc. in your question - the comment thread is getting pretty long and I'm running out of guesses :-)
Selecting columns to print with awk
One method would be to parse the output of ls
.
Example
$ ls -lah | awk '{print $9, $5}' | tail -5
.yEd 4.0K
.youtube-dl 4.0K
.zenmap 4.0K
.zshrc 32
zzzz 3.3K
By the way, you can clean up the output using column
.
$ ls -lah | awk '{print $9, $5}' | column -t | tail -5
z 4
.youtube-dl 4.0K
.zenmap 4.0K
.zshrc 32
zzzz 3.3K
Selecting columns to remove with awk
If you'd rather remove the other columns, while keeping others you can use this awk
method to blank out the undesirable columns.
Example
$ ls -lah | awk '{$1=$2=$3=$4=$6=$7=$8=""}1' | tail -5
4.0K .youtube-dl
4 z -> zzzz
4.0K .zenmap
32 .zshrc
3.3K zzzz
Eventual solution
The OP came up with this chain of commands, using a mix of the examples from above.
$ ls -lah | awk '{print $5, $9$10$11}' | column -t | column
...
4.0K .gphoto 773 .rdebug_hist 4.0K .youtube-dl
1.5K .grip 4.0K .rdesktop 4 z->zzzz
Best Answer
Why not use
stat
instead ofls
?