Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
346 views
in Technique[技术] by (71.8m points)

bash - shell sort command : How to sort by the last column (the number of columns is uncertain)?

If the data is like the follow:

a,b,3
c,d,e,f,2
g,1

I want sort by the last column. the result should be:

g,1
c,d,e,f,2
a,b,3
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

if the last field is single digit

$ rev file | sort | rev

you may need to add -t, -n to sort for numerical ordering but single digits it doesn't matter.

or, for the general case with awk

$ awk -F, '{a[$NF]=$0} END{n=asorti(a,d); for(k=1;k<=n;k++) print a[d[k]]}' file

g,1
c,d,e,f,2
a,b,3

This will fail if the last field is not unique. Using decorate/sort/undecorate idiom you can write instead (as you found yourself)

$ awk -F, '{print $NF FS $0}' file | sort -n | cut -d, -f2-

it's safer to use the field delimiter between the key and the record since you want to ensure the FS doesn't appear in the key itself.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...