- 论坛徽章:
- 0
|
本帖最后由 lannuo2000 于 2012-06-05 14:41 编辑
sort命令一般只能进行字母序、数字序的排序,对于其它形式的排序也只提供月份的排序。像one、two、three这样的序无从排起,更别说中文序。
以下提供自定义任何序的方法!!望大家参考和改进!!!!!!!
cat file
姓名 语文 数学 英语
张三 甲 乙 乙
李四 丙 甲 乙
五王 丁 甲 甲
小六 乙 丙 丁
要求:语文成绩按“甲乙丙丁”的顺序进行排序
sed '1s/^/0 /;s/^\([^ ]\+ 甲\)/1 &/;s/^\([^ ]\+ 乙\)/2 &/;s/^\([^ ]\+ 丙\)/3 &/;s/^\([^ ]\+ 丁\)/4 &/' test>test_old
sort -n test_old | sed s/..//
第一行命令用于自定义序列:甲1,乙2,丙3,丁4,执行结果如下:
0 姓名 语文 数学 英语
1 张三 甲 乙 乙
3 李四 丙 甲 乙
4 五王 丁 甲 甲
2 小六 乙 丙 丁
然后就可以用sort命令进行数值排序。
姓名 语文 数学 英语
张三 甲 乙 乙
小六 乙 丙 丁
李四 丙 甲 乙
五王 丁 甲 甲
awk的实现:
cat file| awk -v SORT="甲 乙 丙 丁" 'BEGIN{split(SORT,arr)}{for(i in arr){if($2 == arr){print i" "$0}}}'|sort | sed '/..//'
|
|