10 awhdk;
14 hjoeow;
2 kdkld;
4 jkjdksl
How to sort this based on column one (i.e the count) ?
I'd want to get this output :
14 hjoeow;10 awhdk;4 jkjdksl;2 kdkld
I need both the columns to be printed based on sorting the first column.
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It only takes a minute to sign up.
Sign up to join this communityYou can use -k
to specify where in the input line the sort key starts and ends.
You use the -n
option or add n
to the sort key specification to trigger a numeric sort as opposed to a lexical sort by default. And -r
to reverse the sort.
Here, for a numerical sort, you don't need to limit the sort key to the sort command. If you do:
sort -rn file
It will treat the whole line as a number. The 14 hjoeow;
line for instance will be understood as the 14
number.
You could do:
sort -bk 1,1rn file
To sort on the first field only, but that would make no difference.
The command to join lines is paste
with the -s
option. You can specify the delimiter with -d
. \0
is a special value for the delimiter that means join with nothing in between. So, to get your expected output:
sort -rn file | paste -sd '\0' -
POSIX paste
require a filename be passed. -
is again a special value that means standard input. You can omit it with some paste
implementations.