你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

如何使用一行awk命令执行日常任务

[复制链接]
gaosmile 发布时间:2020-10-23 20:29
Awk是为高级文本处理而设计的非常强大的工具。它逐行搜索扫描文件,将输入的每行分割成字段,将输入行或字段与模式进行比较,并对匹配的结果执行操作。本节将使用sub和gsub函数和awk命令来删除文件中的制表符和空格。我们将使用以下文本文件作为本文中所有示例的输入文件:
[root@localhost ~]# cat << EOF >> content.txt

<以上代码可复制粘贴,可往左滑>出现大于号时将以下内容复制到终端,将文本内容保存到content.txt文件中。
        hitesh engineer sales 30000
jayesh director account 25000
vyom manager purchase 20000

bhavesh engineer sales 30000
rajesh directory sales 40000
niraj clerk account 20000
jay peon purchase 23000
deep clerk sales 20000
EOF
<以上代码可复制粘贴,可往左滑>

微信图片_20201023202632.png
删除文件中的所有空白行可以使用awk的特殊变量NF,从文件中删除所有空白行。例如,删除文件content.txt中的所有空白行。
[root@localhost ~]# awk NF content.txt
<以上代码可复制粘贴,可往左滑>

微信图片_20201023202635.png
删除每行开头或者末尾的空格和制表符
使用awk命令在文件开头找到一个或多个空格或制表符并删除。可以使用以下命令:
[root@localhost ~]# awk '{ sub(/^[ \t]+/, ""); print }' content.txt
<以上代码可复制粘贴,可往左滑>

微信图片_20201023202638.png

命令行中的意思是:使用sub函数找到开头是制表符和空格的行,并替换空格和制表符为空。注意:sub()函数替换只发生在第一次匹配的时候,也就是一行中有多个空格或多个制表符,只替换左面的第一个。
删除末尾的空格和制表符可以使用下面的命令:
[root@localhost ~]# awk '{ sub(/[ \t]+$/, ""); print }' content.txt
<以上代码可复制粘贴,可往左滑>
同时查询开头和末尾的空格和制表符,可以使用下面命令:
[root@localhost ~]# awk '{ gsub(/^[ \t]+|[ \t]+$/, ""); print }' content.txt
<以上代码可复制粘贴,可往左滑>
gsub函数表示满足条件,替换所有的匹配字符。


倒序列出文件中的所有行
它记录数组中的所有行,并将它们以相反的顺序排列。使用以下命令:
[root@localhost ~]# awk '{ b[i++] = $0 } END { for (j=i-1; j>=0;) print b[j--] }' content.txt
<以上代码可复制粘贴,可往左滑>

微信图片_20201023202641.png
添加行号为每行内容
使用以下命令使用NF内置变量对非空行进行编号:
[root@localhost ~]# awk 'NF { $0=++a ": " $0 }; { print }' content.txt
<以上代码可复制粘贴,可往左滑>

微信图片_20201023202644.png
打印包含特定字符串的行数
使用以下命令来打印包含engineer的总行数:
[root@localhost ~]# awk '/engineer/{n++}; END {print n+0}'  content.txt
<以上代码可复制粘贴,可往左滑>

微信图片_20201023202647.png
打印与指定字符串匹配的行
下面实例中,筛选出含有 engineer字符串的行:
[root@localhost ~]# awk '/engineer/' content.txt
<以上代码可复制粘贴,可往左滑>

微信图片_20201023202651.png

打印与指定字符串不匹配的行
下面实例中,打印不包含字符串 jayesh 的行:
[root@localhost ~]# awk '!/jayesh/' content.txt
<以上代码可复制粘贴,可往左滑>

微信图片_20201023202654.png

替换字符串
实例一:将content.txt中的字符串“ engineer”替换为“ doctor”,用到gsub()函数:
[root@localhost ~]# awk '{gsub(/engineer/,"doctor")}{print}' content.txt
<以上代码可复制粘贴,可往左滑>

微信图片_20201023202657.png

实例二:查找字符串“ jayesh”,“ hitesh”或“ bhavesh”,并将其替换为字符串“ mahesh”,运行以下命令:
[root@localhost ~]# awk '{gsub(/jayesh|hitesh|bhavesh/ , "mahesh"); print}' content.txt
<以上代码可复制粘贴,可往左滑>

微信图片_20201023202700.png

配合df命令,显示磁盘空间
可以将awk命令与df一起使用,只显示设备名称和可用空间、使用率。
[root@localhost ~]# df -h | awk '{printf("%-24s \t %-6s \t %-4s \n",$1,$4,$5)}'
<以上代码可复制粘贴,可往左滑>

微信图片_20201023202704.png

查看每个IP打开的连接数
如果认为服务器受到攻击,那么这种awk单行代码非常有用。它将显示服务器的打开连接列表,并按数量对它们进行排序。
[root@localhost ~]# netstat -ntu|awk '{print $5}'|cut -d: -f1|awk '/[0-9]/'|sort|uniq -c|sort -n
<以上代码可复制粘贴,可往左滑>

微信图片_20201023202707.png

总    结
我们通过实际示例了解如何使用一行awk命令执行日常任务。
收藏 评论0 发布时间:2020-10-23 20:29

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版