Linux-Awk命令处理学生成绩案例

  • Post author:
  • Post category:linux

一、grep命令
1、语法:grep [options] PATTERN file
2、作用:用于查找文件里符合条件的字符串。
3、常用选项:
-n 显示行号
-H 显示具体文件名
–color 显示颜色
-v 不匹配规则
-r 递归的搜索
4、案例:
(1)搜索文中手机号格式的字符串:$ grep -n -H “[0-9]{11}” test.txt
在这里插入图片描述

(2)搜索文中手机号格式的字符串(PREs正则表达式风格):$ grep -P -n -H “\d{11}” test.txt
在这里插入图片描述

(3)其他案例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(4)递归的搜索/etc目录及子目录下,所有包含“update”字符串的文件,并显示文件名及行号:
$ sudo grep –color -n -H -r “update” /etc
在这里插入图片描述

在这里插入图片描述

二、sed命令:

  1. 作用:主要用来自动编辑一个或多个文件,简化对文件的反复操作、编写转换程序等。通过指定的正则表达式完成指定关键字的过滤、截取、修改、添加、删除等操作。

  2. 语法:sed [选项] -e ‘处理脚本’ 文本文件
    在这里插入图片描述

  3. 常用选项:
    -e

在test.txt文件的第1行至第4行前增加“hello”。
$ sed -e “1,4i hello” test.txt
在这里插入图片描述

在test.txt文件的第1行至第4行前增加“hello”,并修改原文件。
$ sed -i -e “1,4i hello” test.txt
在这里插入图片描述

备注:在行后添加,使用“a”动作。
$ sed -e “1a hello” test.txt
$ sed -e “1,4a hello” test.txt
$ sed -i -e “1,4a hello” test.txt
(2)删除
①删除文件中第1行的内容
$ sed -i -e “1d” test.txt
在这里插入图片描述
在这里插入图片描述

②除了文件中第1行之外的内容,其他均删除。
$ sed -i -e ‘1!d’ test.txt
注意:如果脚本中使用“!”,“$”等特殊符号,请使用单引号,不解析这些特殊符号。
在这里插入图片描述

③删除文件中第1行至第3行的内容
$ sed -i -e “1,3d” test.txt
④删除文件中的注释行和所有的空行
$ sed -i -e ‘/^#/d’ -e ‘/^$/d’ test.txt 或者
$ sed -i -r -e “/(^KaTeX parse error: Expected group after ‘^’ at position 2: |^̲#)/d” test.txt … sed -e ‘2c 整行替换’ sed.txt
在sed.txt文件中,替换每行的第一个is为IS:$ sed -e ‘s/is/IS/’ sed.txt
在sed.txt文件中,替换每行的全部is为IS:$ sed -e ‘s/is/IS/g’ sed.txt
在sed.txt文件中,替换每行的第2个is为IS:$ sed -e ‘s/is/IS/2’ sed.txt
将修改保存至新的文件:$ sed -e ‘s/is/IS/2w sed2.txt’ sed.txt
直接修改文件内容,-i选项: $ sed -i ‘2i你好’ sed.txt
说明:sed 的 -i 选项可以直接修改文件内容,举例来说,如果有一个 100 万行的文件,要在第 100 行加某些文字,此时 vim 不适用,因为文件太大了!
三、awk命令

  1. 语法:awk [选项参数] ‘{pattern + action}’ {filenames} var=value file(s)
    或awk [选项参数] -f scriptfile var=value file(s)
  2. 作用:文本内容分析工具
  3. 常用选项:
    在这里插入图片描述

-F fs 指定输入文件的分隔符,fs是一个字符串或者是一个正则表达式。
-v var=value 赋值一个用户定义变量。
-f scripfile从脚本文件中读取awk命令。
4. 内建变量:
在这里插入图片描述

5.案例:
vim创建需要分析的文件:vim student.info,内容如下所示:
在这里插入图片描述

(1)用法1:分割提取
语法: awk -F ‘分割符’ ‘{[pattern] action}’ {filenames}
说明:
print语句:普通打印
printf语句: 格式化打印输出
省略-F是默认以空格来分割
①-F选项按条件分割提取打印指定列:
默认按空格分割,提取第1列内容:awk ‘{print KaTeX parse error: Expected ‘EOF’, got ‘}’ at position 2: 1}̲’ student.info … awk -F ‘,’ ‘{print $1}’ student.info
在这里插入图片描述

默认按空格分割,提取第1列和第4列内容,并格式化输出:
$ awk ‘{printf “%s\t\t%s\n”,$1,$4}’ student.info
在这里插入图片描述

指定按逗号分割,提取第1列和第3列内容,并在执行前后提示begin和end消息:
$ awk -F “,” ‘BEGIN{print “begin…”}{print $1,$3}END{print “end…”}’ student.info

说明:单引号里面存放执行脚本,执行脚本:
BEGIN{ 这里面放的是执行前的语句 }
{这里面放的是正是处理每一行时要执行的语句}
END{这里面放的是处理完所有的行后要执行的语句}
②使用内建变量FS方式指定提取分割符,提取打印指定列:
按逗号分割,提取第1列和第2列内容:
$ awk ‘BEGIN{FS=”,”} {printf “%s\t\t%s\n”,$1,$2} END{print “执行成功…”}’ student.info
按逗号分割,提取第1列和第3列内容,并在开始执行前,打印出当前文件名:
$ awk -F “,” ‘BEGIN{print FILENAME}{print $1,$3}END{print “执行完毕…”}’ student.info
在这里插入图片描述

按逗号分割,提取第1列和第3列内容,并在开始执行前,打印出当前文件名,输出换行符:
$ awk -F “,” ‘BEGIN{print FILENAME ORS}{print $1,$3}END{print “执行完毕…”}’ student.info
在这里插入图片描述

(2)用法2: 做计算
语法:awk -v 变量 -F 分隔符 ‘{[pattern] action}’ {filenames}
选项: -v var=value :声明变量
运算符:
在这里插入图片描述

案例:
按空格分割,定义id变量值为10,并提取第1列内容进行加和:
$ awk -F ” ” -v id=10 ‘{print $1+id}’ student.info
在这里插入图片描述

或:
$ awk ‘BEGIN{FS=” “;id=10}{print $1+id}’ student.info
$ awk -v id=10 -F ” ” ‘{printf “id+1:%d\t\t%s\n”,$1+id,$2}’ log.txt
$ awk ‘BEGIN{id=10} {printf “%d\t\t%s\n”,$1+id,$2} END{print “计算结束”}’ log.txt
$ awk ‘BEGIN{id=10;FS=” “} {printf “%d\t\t%s\n”,$1+id,$2} END{print “计算结束”}’ log.txt
$ awk ‘BEGIN{id=10;FS=” “;str=“hello”} {printf “%d\t\t%s\n”,$1+id,$2 str} END{print “计算结束”}’ log.txt
(3)用法3:结合控制语句:if 、for、while等
案例:
①结合if语句
$ awk ‘BEGIN{FS=” “}{if($1==201700107){print $2}}’ student.info
在这里插入图片描述

$ awk ‘BEGIN{FS=” “}{if($1==201700107){print $2}else{print $1}}’ student.info
在这里插入图片描述

②结合for语句
$ awk ‘BEGIN{FS=” “;count=3}{for(i=1;i<=count;i++){print $0}}’ student.info
在这里插入图片描述

(4)用法4:内建变量
awk ‘BEGIN{FS=”,”;printf “行号\t文件名\t字段分隔符\t字段数\n”;printf “— —————\n”}{printf “%d\t%s\t%s\t%d\n”,NR,FILENAME,FS,NF}END{printf “分析结束\n”}’ student.info
二、综合案例:(awk命令处理学生成绩案例)
1.现有一学生成绩文件,使用awk命令对成绩分析排版,成绩文件的内容如下所
示:(第1列姓名,第2列学号,第3列数学成绩,第4列英语成绩,第5列计算机成绩)
在这里插入图片描述

要求:对每门课程求取总成绩及平均成绩;对每位学生求取总成绩及平均成绩。
2.编写awk脚本分析文件awkscore:
在这里插入图片描述

3.使用-f选项指明调用该脚本文件处理score.txt。
$ awk -f awkscore score.txt
执行结果如下所示:
在这里插入图片描述


版权声明:本文为weixin_43872893原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。