接下来的题目都是以这个文件的内容来写的: 文件名为student.txt
文件中有7个域,表示学生姓名、籍贯、C语言,数据库,离散数学,java、Linux考试成绩
江华 南京 4 89 66 93 67
李准 石家庄 86 92 76 83 87
小飞 邢台 88 66 55 96 93
王波 岳阳 93 79 85 78 90
柏慧 无锡 96 88 82 86 91
图雅 绍兴 96 77 86 84 90
安冬 绍兴 55 87 96 44 97
sort排序
- sort 按照C语言成绩降序排列
sort -k3,3 -nr student.txt
- -k3和-k3,3的区别:
-k3表示先以第三列作为排序标准,如果有重复的,按照后一位作为排序标准(从第三列到最后一列来排序)-k3,3表示只以第三列作为排序标准,后边的不管
-n:按照数值进行排序-r:降序排序(写为-nr意思一样)- 默认升序排序(不加r),加r表示降序排序
2.sort 按照C语言成绩升序排列,如果相同,再按Java成绩降序排列
sort -k3,3n -k6,6nr student.txt
cut命令
- 列出c语言成绩不同的分数 提示 cut sort uniq
cut -d ' ' -f3 student.txt | sort | uniq
cut -d ' ' -f3:正确指定空格作为分隔符(-d ' '),并提取第三列(-f3)。sort:排序是必要的,因为uniq依赖相邻重复行才能去重。uniq:最终去重得到唯一值。
awk命令
- awk 列出 姓名 和总分
awk '{print 3+5+7}' student.txt 2. awk 列出每科都及格的学生姓名
awk '3>=60 && 4>=60 && 5>=60 && 6>=60 && 7>=60 {print 1}' student.txt 3. awk 列出C语言成绩最高的学生姓名 提示 begin {} End
awk 'BEGIN {max = 0} {if (3 > max) {max = 3; name = $1}} END {print name}' student.txt 4. awk 列出学生姓名和C语言成绩
awk '{print 3}' student.txt
sed命令
- sed 将96替换为66
sed 's/96/66/g' student.txt
s/:替换命令的起始标志96/66/:将匹配到的字符串96替换为66g:全局替换 (global),对行内所有匹配项生效(不加g则每行只替换第一个匹配)
- sed 将不及格的成绩[1-5]x替换为6x
sed 's/[1-5]([0-9])/6\1/g' student.txt
[1-5]:精确匹配十位数为1-5的数字(不及格成绩)$[0-9]$:捕获分组,用$ $将个位数(0-9)保存为 \16:强制将十位数改为6\1:反向引用前面捕获的个位数