Linux期末复习三

90 阅读2分钟

接下来的题目都是以这个文件的内容来写的: 文件名为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排序

  1. 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命令

  1. 列出c语言成绩不同的分数  提示 cut sort uniq

cut -d '  ' -f3 student.txt | sort  | uniq

  • cut -d ' ' -f3:正确指定空格作为分隔符(-d ' '),并提取第三列(-f3)。
  • sort:排序是必要的,因为uniq依赖相邻重复行才能去重。
  • uniq:最终去重得到唯一值。

awk命令

  1. awk 列出 姓名 和总分

awk '{print 1,1,3+4+4+5+6+6+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 1,1, 3}' student.txt

sed命令

  1. sed 将96替换为66

sed 's/96/66/g' student.txt

  • s/ :替换命令的起始标志
  • 96/66/ :将匹配到的字符串 96 替换为 66
  • g:全局替换 (global),对行内所有匹配项生效(不加g则每行只替换第一个匹配)
  1. sed 将不及格的成绩[1-5]x替换为6x

sed 's/[1-5]([0-9])/6\1/g' student.txt

  • [1-5]:精确匹配十位数为1-5的数字(不及格成绩)
  • $[0-9]$捕获分组,用$ $将个位数(0-9)保存为 \1
  • 6:强制将十位数改为6
  • \1反向引用前面捕获的个位数