awk的基础用法

继续看看awk吧,本来准备看看就算了,还是记下来以免白费时间

awk

内置变量 NF、NR、FS

[[email protected] /data/backup]#cat > studyawk

name chinese english math average

lucy 80 60 92 773

malei 75 55 80 70

andy 60 90 70 73.33

[[email protected] /data/backup]#sed -i ‘s/773/77.33/g‘ studyawk

[[email protected] /data/backup]#cat studyawk

name chinese english math average

lucy 80 60 92 77.33

malei 75 55 80 70

andy 60 90 70 73.33

准备一下文件,我只是单纯的写错了,然鹅键盘输入下退格变成了^H,正好顺便练习一下替换吧

[[email protected] /data/backup]#awk ‘{print $1 "\t " $5}‘ studyawk

name average

lucy 77.33

malei 70

andy 73.33

显示指定 列(默认以空格或tab分隔的一行的第几字段,可以用如FS=":"来指定以冒号为分隔符),$0代表整行,awk默认首先读入第一行,并且定义$0、$1、$2...内容,然后在根据用户指定命令、条件来处理,我们可以自定义BEGIN、END,来从第一行开始就指定分隔符FS,而NF则代表每行的字段书,NR指相邻的前一命令处理的是第几行数据)

上述"\t"表示字段间用tab分开,事实证明也可以直接键入空格键"  "

[[email protected] /data/backup]#awk ‘{print $1 "\t line" NR "  "  $5 "\t"  "sumkinds" NF-2}‘ studyawk

name line1  average sumkinds3

lucy line2  77.33 sumkinds3

malei line3  70 sumkinds3

andy line4  73.33 sumkinds3

显示第一、第五字段,另外显示行号linen以及一共有几科目,减去第一列名字和最后一列均值,科目数为字段数-2.我们实际敲命令时可以得知,awk后接‘{  }‘括号内写命令、参数,要显示的文字、字符和\t要用双引号,而内置变量NR、NF不可以放到双引号中,否则会被视为字符而不是变量。上述命令还发现可以通过NF-2实现运算!!

如下部分为printf的一些练习,之后会结合两者写个命令:

[[email protected] /data/backup]#printf ‘%5s %2i %2i %2i %4.2f‘  $(cat studyawk)

-bash: printf: chinese: invalid number

-bash: printf: english: invalid number

-bash: printf: math: invalid number

-bash: printf: average: invalid number

name  0  0  0 0.00 lucy 80 60 92 77.33malei 75 55 80 70.00 andy 60 90 70 73.33

纳尼??怎么会这样? i是integer数字类型,而第一行的单词都不是数字,所以会报错,而之后是通过合适的数据类型显示的,但是都在一行

[[email protected] /data/backup]#printf ‘%5s %2i %2i %2i %4.2f \n‘  $(cat studyawk)

-bash: printf: chinese: invalid number

-bash: printf: english: invalid number

-bash: printf: math: invalid number

-bash: printf: average: invalid number

name  0  0  0 0.00

lucy 80 60 92 77.33

malei 75 55 80 70.00

andy 60 90 70 73.33

这次顺眼点了吧

[[email protected] /data/backup]#printf ‘%5s %2i %2i %2i %4.2f \n‘  $(cat studyawk | grep -v name)

lucy 80 60 92 77.33

malei 75 55 80 70.00

andy 60 90 70 73.33

符号$()表示执行括号内命令,同样作用还有如下的``反单引号

[[email protected] /data/backup]#printf ‘%5s %2i %2i %2i %4.2f \n‘  `cat studyawk | grep -v name`

lucy 80 60 92 77.33

malei 75 55 80 70.00

andy 60 90 70 73.33

[[email protected] /data/backup]#cat studyawk | awk ‘NR==1{printf "%8s %10s %8s %8s %8s \n",$1,$2,$3,$4,$5};NR>=2{printf "%8s %2d %2d %2d %4.2f\n",$1,$2,$3,$4,$5}‘

name    chinese  english     math  average

lucy 80 60 92 77.33

malei 75 55 80 70.00

andy 60 90 70 73.33

[[email protected] /data/backup]#cat studyawk | awk ‘NR==1{printf "%8s %10s %8s %8s %8s \n",$1,$2,$3,$4,$5};NR>=2{printf "%8s %8d %8d %8d %4.2f\n",$1,$2,$3,$4,$5}‘

name    chinese  english     math  average

lucy       80       60       92 77.33

malei       75       55       80 70.00

andy       60       90       70 73.33

[[email protected] /data/backup]#cat studyawk | awk ‘NR==1{printf "%8s %10s %8s %8s %8s \n",$1,$2,$3,$4,$5};NR>=2{printf "%8s %8d %8d %8d %8.2f\n",$1,$2,$3,$4,$5}‘

name    chinese  english     math  average

lucy       80       60       92    77.33

malei       75       55       80    70.00

andy       60       90       70    73.33

awk的‘‘内还可以做逻辑判断来执行命令,将第一行和其他行设置不同的数据类型就可以正常显示了。可以看到定义的数据长度会直接影响显示的字段间距。

下面我们再每行最后加入一列:

[[email protected] /data/backup]#cat studyawk | awk ‘NR==1{printf "%8s %10s %8s %8s %8s \n",$1,$2,$3,$4,$5,"total"};NR>=2{total=$2+$3+$4;printf "%8s %8d %8d %8d %8.2f\n",$1,$2,$3,$4,$5,total}‘

name    chinese  english     math  average

lucy       80       60       92    77.33

malei       75       55       80    70.00

andy       60       90       70    73.33

加了total为啥看不到,没有显示到屏幕

[[email protected] /data/backup]#cat studyawk | awk ‘NR==1{printf "%8s %10s %8s %8s %8s %8s\n",$1,$2,$3,$4,$5,"total"};NR>=2{total=$2+$3+$4;printf "%8s %8d %8d %8d %8.2f %3d\n",$1,$2,$3,$4,$5,total}‘

name    chinese  english     math  average    total

lucy       80       60       92    77.33 232

malei       75       55       80    70.00 210

andy       60       90       70    73.33 220

printf没有定义显示它的数据类型

[[email protected] /data/backup]#cat studyawk | awk ‘NR==1{printf "%8s %10s %8s %8s %8s %8s\n",$1,$2,$3,$4,$5,"total"};NR>=2{total=$2+$3+$4;printf "%8s %8d %8d %8d %8.2f %8d\n",$1,$2,$3,$4,$5,total}‘

name    chinese  english     math  average    total

lucy       80       60       92    77.33      232

malei       75       55       80    70.00      210

andy       60       90       70    73.33      220

调整一下长度,美观了点,好像有点太长了,不管了。。。

可能待续...

时间: 2025-01-13 03:26:38

awk的基础用法的相关文章

awk:基础篇+案例

awk提供了很强大的功能,它是linux中功能最强大的数据处理引擎之一,它不仅可以对文本数据进行搜索分析处理排序,还可以支持数学运算,含有内置函数和内置变量,甚至还可以进行一些脚本处理,编程.可以这么说,它可以根据发挥者的能力来起作用. awk在linux中其实并不叫awk,而叫gawk [[email protected] ~]# which awk /bin/awk [[email protected] ~]# ls -l /bin/awk lrwxrwxrwx. 1 root root 4

【转载 更新】Linux工具之AWK 2.基础知识

1. awk简介 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入.一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具.它在命令行中使用,但更多是作为脚本来使用.awk的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作.如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指

【转载更新】Linux工具之AWK 2.基础知识

1.awk简介awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入.一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具.它在命令行中使用,但更多是作为脚本来使用.awk的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作.如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指定的

sass基础用法

sass基础用法 SASS是什么 传统的CSS是一种单纯的描述性样式文件,然而SASS可以对CSS进行预编译处理. 在SASS源码中可以使用变量.函数.继承等动态语言的特性,并且可以编译成CSS文件. 安装与使用 安装 由于sass是ruby写的,所以想要使用sass就需要安装ruby环境.然后再使用gem安装sass. 输入下面的命令进行安装sass: gem install sass 可以使用sass -v命令查看sass的版本. 使用 新建一个后缀名为.scss源码文件,就可以编辑sass

游标基础用法

Create PROCEDURE P_InsertSubject@SubjectId intASDECLARE rs CURSOR LOCAL SCROLL FORselect studentid from student where StudentGradu = 1OPEN rsFETCH NEXT FROM rs INTO @tempStudentIDWHILE @@FETCH_STATUS = 0BEGINInsert SelSubject values (@SubjectId,@temp

Cocos数据篇[3.4](6) ——SQLite3数据库基础用法

[唠叨] 在Cocos2d-x中,简单数据存储,可以使用UserDefault.那么如何存储大量,不规则的数据?我们可以使用 SQLite数据库 存储数据.SQLite 是使用非常广泛的 嵌入式数据库 ,它有小巧 .高效.跨平台.开源免费和易操作的特点.所以大量的被用于手机.PDA.MP3播放器.以及机顶盒设备. SQLite数据库是使用C语言来编写的,因此在Cocos2d-x使用SQLite也是得心应手. 本文介绍一下SQLite3数据库的基础用法:增删改查. PS:另外对于SQLite的可视

sed命令基础用法

    sed(Stream EDitor)简介 sed是一个流编辑器编辑器,本身是一个管道命令,主要以行为单位处理文本文件,可以将数据进行替换.删除.新增.选取等特定工作:sed并不会处理文本文件本身,而是每当处理一个文件时,按顺序逐行读取到模式空间(内存)中,而后在模式空间中完成编辑,把编辑的结果输出到屏幕上,接着处理下一行,反复操作,直到文件结尾. 模式空间:将读取的内容放在内存中的一块区域编辑,这些内存空间就称为模式空间 格式: sed [options]    'Address Com

2017.04 vue学习笔记---08表单控件绑定---基础用法

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <style> div{ margin-bottom: 30px; } </style> <script src="js/vue.js"></script> <

UIButton的最基础用法

UIButton的最基础用法 UIButton (1) 创建显示一个Button      //演示UI中按钮类UIButton使用 //需求: 想要在界面上显示一个按钮 //解决:   使用UIButton按钮类  //<1>创建按钮,一般需要指定按钮的风格 //系统样式的按钮:  UIButtonTypeSystem //如果创建带图片的: 一般选用UIButtonTypeCustom //圆角矩形: ios7不再使用UIButtonTypeRoundedRect //UIButtonTy