Sort 在 Linux
2021/9/28 7:11:15
本文主要是介绍Sort 在 Linux,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本文讨论Linux里面的sort语句
用man查看
对应菜鸟驿站:
部分语法实践:
-
sort -k 2 stu.txt
降序排序,以字符串逐次比较,故需要补齐个位
-
sort -k 2 –n stu.txt
添加-n 以整数进行比较
-u 意味着是唯一的(unique),输出的结果是去完重的
-r 以相反的顺序来排序
-b 忽略每行前面开始出的空格字符
-c会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1
-C会检查文件是否已排好序,如果乱序,不输出内容,仅返回1
Sort 伪代码
对于排序的算法,可以参考大一下学过的快速排序
0) 定义字符串所在列序号为CharNum,字符串长度CharSize,每遇换行则重置为0。定义结构体数组,存每一行的各个“单词“;
- fopen打开文件stu.txt;
- fread读取文件,按行读,每遇到分号[;]或者空格则将之前的字符串存入数组,并将字符串长度CharSize重置为0;字符串所在列序号+1;
每一行按顺序存储单词到对应结构体的数组的第[列序号]位置; - 检测sort功能,如-k num;-c;-C;-b;-r;-n;-o;
- 检测-c,-C,如是,编历判断是否有序,输出对应值;
- 检测-k,代表第几列为排序列;若没有默认为第一列
- -n:以数值大小排序
- 等等
下面针对学生成绩处理进行了简单的sort函数编程(sort [文件名])
测试结果如下:
源代码:
//每行输入五个值,分别对应为:学号,姓名,数学,语文,总和 #include<stdio.h> #include<stdlib.h> #include<string.h> #define n 200 typedef struct row{ long number; char name[50]; int math; int chinese; int sum; }STU; STU arr[n]; int num(const void *a, const void *b) { int number1=((STU *)a)->number; int number2=((STU *)b)->number; return number1>number2?1:-1; } int nam(const void *a, const void *b) { char *s1=((STU *)a)->name; char *s2=((STU *)b)->name; return strcmp(s1,s2); } int mat(const void *a, const void *b) { int number1=((STU *)a)->math; int number2=((STU *)b)->math; return number1>number2?1:-1; } int chi(const void *a, const void *b) { int number1=((STU *)a)->chinese; int number2=((STU *)b)->chinese; return number1>number2?1:-1; } int rank(const void *a, const void *b) { int number1=((STU *)a)->sum; int number2=((STU *)b)->sum; return number1>number2?1:-1; } int num0(const void *a, const void *b) { int number1=((STU *)a)->number; int number2=((STU *)b)->number; return number1<number2?1:-1; } int nam0(const void *a, const void *b) { char *s1=((STU *)a)->name; char *s2=((STU *)b)->name; return strcmp(s2,s1); } int mat0(const void *a, const void *b) { int number1=((STU *)a)->math; int number2=((STU *)b)->math; return number1<number2?1:-1; } int chi0(const void *a, const void *b) { int number1=((STU *)a)->chinese; int number2=((STU *)b)->chinese; return number1<number2?1:-1; } int rank0(const void *a, const void *b) { int number1=((STU *)a)->sum; int number2=((STU *)b)->sum; return number1<number2?1:-1; } int main(int argc,char *argv[]){ FILE *fp; char testfile[100]; scanf("%s",testfile); if((fp=fopen(testfile,"r"))==NULL) { printf("fail to open the file!"); return 0; } int i=0,j=0; while(fscanf(fp,"%ld %s %d %d %d",&arr[i].number,arr[i].name,&arr[i].math,&arr[i].chinese,&arr[i].sum)!=EOF) { i++; } printf("choose the line that you want to sort?\n"); int c; scanf("%d",&c); printf(" ascend(press 1) or descend(press 0)?\n"); int q; scanf("%d", &q); if(q==1){ if(c==1) qsort(arr,i,sizeof(struct row),num); else if(c==2) qsort(arr,i,sizeof(struct row),nam); else if(c==3) qsort(arr,i,sizeof(struct row),mat); else if(c==4) qsort(arr,i,sizeof(struct row),chi); else if(c==5) qsort(arr,i,sizeof(struct row),rank); else return -1; for( j=0;j<i;j++) printf("%ld %s %d %d %d\n",arr[j].number,arr[j].name,arr[j].math,arr[j].chinese,arr[j].sum); return 0; } if(q==0){ if(c==1) qsort(arr,i,sizeof(struct row),num0); else if(c==2) qsort(arr,i,sizeof(struct row),nam0); else if(c==3) qsort(arr,i,sizeof(struct row),mat0); else if(c==4) qsort(arr,i,sizeof(struct row),chi0); else if(c==5) qsort(arr,i,sizeof(struct row),rank0); else return -1; for( j=0;j<i;j++) printf("%ld %s %d %d %d\n",arr[j].number,arr[j].name,arr[j].math,arr[j].chinese,arr[j].sum); return 0; } }
这篇关于Sort 在 Linux的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-18git仓库有更新,jenkins 自动触发拉代码怎么配置的?-icode9专业技术文章分享
- 2024-12-18Jenkins webhook 方式怎么配置指定的分支?-icode9专业技术文章分享
- 2024-12-13Linux C++项目实战入门教程
- 2024-12-13Linux C++编程项目实战入门教程
- 2024-12-11Linux部署Scrapy教程:新手入门指南
- 2024-12-11怎么将在本地创建的 Maven 仓库迁移到 Linux 服务器上?-icode9专业技术文章分享
- 2024-12-10Linux常用命令
- 2024-12-06谁看谁服! Linux 创始人对于进程和线程的理解是…
- 2024-12-04操作系统教程:新手入门及初级技巧详解
- 2024-12-04操作系统入门:新手必学指南