I have to sort files in current directory based on word count by using command wc
and pipe |
necessarily.
What command do I have to use?
I thought I had to use a command sort | wc -w
, but I failed.
Advertisement
Answer
I think this can help.
ls -1 | xargs wc -w | sort
The ls -1
will list all files of the current directory, and then pass it to xargs
to use the output of the previous command as input of the command wc -w
. Finally we pipe the result to sort
command to order them by number of words each file contain.
You can learn more about xargs
here.
The output:
[amirreza@localhost test]$ ls -1 four_words three_words two_words [amirreza@localhost test]$ ls -1 | xargs wc -w 4 four_words 3 three_words 2 two_words 9 total [amirreza@localhost test]$ ls -1 | xargs wc -w | sort 2 two_words 3 three_words 4 four_words 9 total
Edit
I just figured out that my answer was not correct. Because sort
command by default works character by character, so the result of sorting 2
, 10
, 3
will be:
10, 2, 3
Because it only checks the first character of 10
and it’s 1
so it’s less than 2
and 3
.
To fix it we should use numerical sort, by using n
flag. Here’s how it works:
[amirreza@localhost test]$ ls -1 | xargs wc -w | sort 10 ten_words 19 total 2 two_words 3 three_words 4 four_words [amirreza@localhost test]$ ls -1 | xargs wc -w | sort -n 2 two_words 3 three_words 4 four_words 10 ten_words 19 total
And just to make output more cleaner we can remove the total
line and just show the file names.
[amirreza@localhost test]$ ls -1 | xargs wc -w | sort -n | awk '{print $2}' | head -n -1 zero_word two_words three_words four_words ten_words