关于排序的一个问题,搞了好几天没搞定,希望各位大神指教! 不胜感激!
问题描述: 有一个文件a.txt,内容如下:
host@:/opt/folder/file1 1 11 111 /opt/folder/file1
host@:/opt/folder/file2 2 22 111 /opt/folder/file2
host@:/opt/folder/file3 3 33 123 /opt/folder/file3
我现在想让以第四列降序重新排序, 但是保证如果有任意2行该列相等的话,不改变它们在文件中出现的先后顺序,也就是对文件中file1, 排序后希望它还在file2前。
我尝试过命令 cat a.txt | sort -nr k 4, 这样不行 虽然可以降序排列,但是会改变相等行在文件的先后次序,原因是
sort 命令会如果在当前列相等的话,会自动比较后面的列。
附上期望排序后结果:
host@:/opt/folder/file3 3 33 123 /opt/folder/file3
host@:/opt/folder/file1 1 11 111 /opt/folder/file1
host@:/opt/folder/file2 2 22 111 /opt/folder/file2
sort排序的问题。
-
- 帖子: 2
- 注册时间: 2013-04-04 22:27
- 系统: win7
- needle
- 帖子: 78
- 注册时间: 2009-12-01 13:34
Re: sort排序的问题。
代码: 全选
for field in $(cat a.txt|awk '{print $4}'|sort -nr|uniq)
do
cat a.txt|awk '{if($4=='${field}')print $0}'
done
加油,sed与awk才是王道!
-
- 帖子: 2
- 注册时间: 2013-04-04 22:27
- 系统: win7
Re: sort排序的问题。
十分感谢needle, 我一直在考虑用sort 思维固化了。