东莞php网站建设价格,做手机网站价格,如何注册国外域名,河南seo技术教程#x1f680; 优质资源分享 #x1f680;
学习路线指引#xff08;点击解锁#xff09;知识定位人群定位#x1f9e1; Python实战微信订餐小程序 #x1f9e1;进阶级本课程是python flask微信小程序的完美结合#xff0c;从项目搭建到腾讯云部署上线#xff0c;打造一… 优质资源分享
学习路线指引点击解锁知识定位人群定位 Python实战微信订餐小程序 进阶级本课程是python flask微信小程序的完美结合从项目搭建到腾讯云部署上线打造一个全栈订餐系统。Python量化交易实战入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统
目录* 1、AWK介绍 1AWK概述 2printf格式化输出 3printf命令说明
2、AWK的基本使用 1AWK命令说明2AWK命令使用
1、AWK介绍
1AWK概述
AWK是一种处理文本文件的语言是一个强大的文本分析工具。
AWK可以看成一门独立的语言它拥有语言的基本特征换句话说AWK可以写出极其繁琐和复杂的程序AWK的语法比Shell的语法还难以接收。但绝大多数情况下我们并不需要用AWK写过于复杂的东西建议能用Shell处理的需求就不用AWK来解决。
当用AWK处理需求远要比Shell处理简单的多的时候我们就用AWK来解决。
AWK也是用来截取列信息的它比Shell中的cut命令更先进比如对空格作为分隔符的处理。
2printf格式化输出
在学习AWK之前我们要先学习一下printf格式化输出命令这个命令是AWK基本输出中必须要用到的一个命令。
AWK的标准输出支持print命令和printf命令这两个命令在AWK当中基本作用是一样的但是Linux命令中只支持printf命令如下
shell
# 在Linux中执行print命令和printf命令[root192 ~]# print
# 报错命令没有找到
-bash: print: command not found[root192 ~]# printf
# 提示你命令格式写错了
printf: usage: printf [-v var] format [arguments]
我们可以看到Linux系统中只支持printf命令所以我们这里就先学习一下printf命令。
3printf命令说明
shell
[rootlocalhost ~]# printf 输出类型输出格式 输出内容输出类型%ns输出字符串。n是数字指输出几个字符。%ni输出整数。n是数字指输出几个数字。%m.nf输出浮点数。m和n是数字指输出的总位数和小数位数。如%8.2f代表共输出8位数其中2位是小数6位是整数。输出格式\a输出警告声音。\b输出退格键也就是Backspace键。\f清除屏幕。\n换行。\r回车也就是Enter键。\t水平输出退格键也就是Tab键\v垂直输出退格键也就是Tab键。练习使用如下文本
highlighter- apache
ID Name Python Linux MySQL Java
1 Tangs 88 87 86 85.55
2 Sunwk 99 98 97 96,66
3 Zhubj 77 76 75 74.44
4 Shahs 66 65 64 63.33执行printf命令
[rootlocalhost tmp]# printf %s $(cat student.txt)
说明printf命令后是没有办法直接写参数的也就是不能直接加文件名来读取文件的内容printf命令支持的是其他命令结果的输出交给printf命令来处理。所以说printf命令很少单独使用一般都放在AWK当中来使用这样更加合理否则就和上边一样看起来很难受。
结果
shell
[rootlocalhost tmp]# printf %s $(cat student.txt)
IDNamePythonLinuxMySQLJava1Tangs88878685.552Sunwk99989796,663Zhubj77767574.444Shahs66656463.33[root192 tmp]#我们可以看到上面的结果非常的烂他是把所有的内容一个字符紧接着一个字符的输出中间没有空格或者回车。
这就是printf命令如果不指定输出的格式则会把所有输出内容连在一起输出。其实文本的输出本身就是这样的cat等文本输出命令之所以可以按照漂亮的格式输出那是因为cat命令已经设定了输出格式。
那么为了让printf输出合理的格式就需要手动自定义自己需要的格式。
printf %s\t %s\t %s\t %s\t %s\t %s\t \n $(cat student.txt) 说明就是输出一个字符串%s后边加上一个制表符tab键隔开\t这样一共有6列写6个%s\t然后每一行最后加上一个回车\n。 执行命令结果如下
shell
[rootlocalhost tmp]# printf %s\t %s\t %s\t %s\t %s\t %s\t \n $(cat student.txt)
ID Name Python Linux MySQL Java
1 Tangs 88 87 86 85.55
2 Sunwk 99 98 97 96.66
3 Zhubj 77 76 75 74.44
4 Shahs 66 65 64 63.33注意%s\t %s\t %s\t %s\t %s\t %s\t \n中的空格是没有意思的写多少都行只是方便自己看printf命令只认\n、 \t等输出格式。 如果不想把成绩当成字符串输出而是按照整型和浮点型输出执行如下命令
shell
[root192 tmp]# printf %i\t %s\t %i\t %i\t %i\t %8.2f\t \n $(cat student.txt | grep -v Name)
1 Tangs 88 87 86 85.55
2 Sunwk 99 98 97 96.66
3 Zhubj 77 76 75 74.44
4 Shahs 66 65 64 63.33这个例子不是很好但一定要把标题顾虑掉否则会出现如下效果标题都被变成了整型数据。
shell
[rootlocalhost tmp]# printf %i\t %s\t %i\t %i\t %i\t %8.2f\t \n $(cat student.txt)
-bash: printf: ID: invalid number
-bash: printf: Python: invalid number
-bash: printf: Linux: invalid number
-bash: printf: MySQL: invalid number
-bash: printf: Java: invalid number
0 Name 0 0 0 0.00
1 Tangs 88 87 86 85.55
2 Sunwk 99 98 97 96.66
3 Zhubj 77 76 75 74.44
4 Shahs 66 65 64 63.332、AWK的基本使用
1AWK命令说明
shell
[rootlocalhost ~]# awk 条件1{动作1} 条件2{动作2} ... 文件名条件Pattern一般使用关系表达式作为条件。这些关系表达式非常多具体看下面一点。简单举例x10判断变量x是否大于10。xy判断变量x是否等于变量y 。A~B判断字符串A中是否包含能匹配B表达式的子字符串。A!~B判断字符串A中是否不包含能匹配B表达式的子字符串。动作Action格式化输出。流程控制语句。提示先判断条件是否成立在进行对应动作。可以没有条件直接写动作如果没有条件则直接执行动作。 2AWK命令使用
1基本使用
使用如下文本
highlighter- apache
ID Name Python Linux MySQL Java
1 Tangs 88 87 86 85.55
2 Sunwk 99 98 97 96,66
3 Zhubj 77 76 75 74.44
4 Shahs 66 65 64 63.33执行命令awk {printf $2 \t $3 \t $6 \t \n} student.txt
结果
shell
[rootlocalhost tmp]# awk {printf $2 \t $3 \t $6 \t \n} student.txt
Name Python Java
Tangs 88 85.55
Sunwk 99 96.66
Zhubj 77 74.44
Shahs 66 63.33说明 AWK的动作条件是需要用单引号括起来的所以在动作条件中的printf命令中定义的输出格式时单引号就需要改换成双引号了这里要注意。没有条件就是每一行都处理。AWK的主要动作就是用printf命令来输出的。AWK中可以直接添加文本文件来获取文件中所需内容。 这里在补充一下print命令和printf命令用法差不多print命令自带换行符但是Linux系统不支持print命令。
shell
# 使用print命令就不需要加上\n换行符了。
[rootlocalhost tmp]# awk {print $2 \t $3 \t $6 \t} student.txt
Name Python Java
Tangs 88 85.55
Sunwk 99 96.66
Zhubj 77 74.44
Shahs 66 63.332处理分隔符是空格的情况
看磁盘情况的df命令的结果中数据之间的分隔符是空格用cut命令是处理不了的。
如下
shell
# 查看磁盘情况
[rootlocalhost tmp]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 2.1G 16G 12% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 240M 34M 194M 15% /boot# 获取第二列信息
[rootlocalhost tmp]# df -h | cut -f 2
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 2.1G 16G 12% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 240M 34M 194M 15% /boot
使用AWK解决需求获取磁盘情况的第1列和第5列的信息。
shell
[rootlocalhost tmp]# df -h | awk {printf $1 \t $5 \t \n}
Filesystem Use%
/dev/sda3 12%
tmpfs 0%
/dev/sda1 15%3综合练习
获取下面信息中根分区的占有率12。
shell
[rootlocalhost tmp]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 2.1G 16G 12% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 240M 34M 194M 15% /boot执行命令
shell
[rootlocalhost tmp]# df -h | grep dev/sda3 | awk {print $5} | cut -d % -f 1
121、AWK介绍 1AWK概述 2printf格式化输出 3printf命令说明 2、AWK的基本使用 1AWK命令说明 2AWK命令使用 __EOF__ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SH4Kmv7e-1654663886945)(https://blog.csdn.net/liuyuelinfighting)]繁华似锦的博客 - 本文链接 https://blog.csdn.net/liuyuelinfighting/p/16354919.html
关于博主 评论和私信会在第一时间回复。或者直接私信我。版权声明 本博客所有文章除特别声明外均采用 BY-NC-SA 许可协议。转载请注明出处声援博主 如果您觉得文章对您有帮助可以点击文章右下角**【[推荐](javascript:void(0)】**一下。