20191317王鹏宇sort

sort



实践内容:使用man指令查看sort用法
实践截图:

使用man sort查看sort指令的用法:

Sort是用于对单个或多个文本文件内容进行排序的Linux程序。Sort命令以空格作为字段分隔符,将一行分割为多个关键字对文件进行排序。需要注意的是除非你将输出重定向到文件中,否则Sort命令并不对文件内容进行实际的排序(即文件内容没有修改),只是将文件内容按有序输出。

参数:

  • -b 忽略每行前面开始出的空格字符。
  • -c 检查文件是否已经按照顺序排序。
  • -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
  • -f 排序时,将小写字母视为大写字母。
  • -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
  • -m 将几个排序好的文件进行合并。
  • -M 将前面3个字母依照月份的缩写进行排序。
  • -n 依照数值的大小排序。
  • -o将排序后的结果存入指定的文件。
  • -r 以相反的顺序来排序。
  • -t指定排序时所用的栏位分隔字符。
  • --help 显示帮助。
  • --version 显示版本信息

实践内容:sort命令使用
下图是20191317.txt文件的内容:



指令:cat sort.txt | sort
实践截图:

在上面的命令中,当前的排序是按照首个字符进行的,这一行不应该在最后一行吗?所以按照首字符大小,确实是从小到大的排序,而如果想要指定按照“数字”的方式进行排序,则需要加上-n参数。



接下来是sort实现逆向排序:
指令:cat sort.txt | sort -n -r

可以从输出结果看出,确实实现了逆向排序。



下面是sort实现选择分隔符进行排序:
指令:cat stu.txt |sort -t':' -k 3 -n stu.txt
文件stu.txt内容:

使用-t来选择分隔符,使用-k来选择区域:
当选择第三个区域进行排序:会对最后面的数字进行从小到大的排序

选择第一个区域进行排序:会对最前面的学号进行从小到大的排序


以下是几个常用的sort命令:

-f会将小写字母都转换为大写字母来进行比较,亦即忽略大小写

-c会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1

-C会检查文件是否已排好序,如果乱序,不输出内容,仅返回1

-M会以月份来排序,比如JAN小于FEB等等

-b会忽略每一行前面的所有空白部分,从第一个可见字符开始比较。

实践内容:编写伪代码
伪代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//设置学生结构体
struct student{
	stuNum; //学号
	name[20];//姓名
	score;//成绩
};
//读取文件内容到结构体
void readfile()
{
    FILE *fd;  // filename 的文件描述符
    fscanf(fd,"%d %s %d", a->stuNum, &a->name, &a->score) //将文件内容传递到结构体数组中
    fclose(fd);
}
//依据学生学号排序
void stuNum_sort()
{
	对结构体数组中存储学号按照大小进行正向冒泡排序
	输出排序好的学号姓名成绩
}

//依据学生姓名排序
void sort()
{
	对结构体数组存储的姓名按照ascii码大小进行正向冒泡排序
	输出排序好的学号姓名成绩
}

//依据成绩进行排序
void stuScore_sort(student *stu,int n)
{
	对结构体数组存储的成绩按照大小进行正向冒泡排序
	输出排序好的学号姓名成绩
}

//main函数
int main()
{
	输入文件名filename;
	readfile(filename);
	输入排序方式t;
	switch (t)
	{
		case 1:
			stuNum_sort();//学号排序
			break;
		case 2:
			name_sort();//姓名排序
			break;
		case 3:
			score_sort();//成绩排序
			break;
	}
	return 0;
}
原文地址:https://www.cnblogs.com/wpy-1049363419/p/15345214.html