设为首页收藏本站language→→ 语言切换

鸿鹄论坛

 找回密码
 论坛注册

QQ登录

先注册再绑定QQ

查看: 1071|回复: 0
收起左侧

如何使用awk处理文本内容

[复制链接]
发表于 2021-8-19 14:25:22 | 显示全部楼层 |阅读模式
Awk是为高级文本处理而设计的非常强大的工具。它逐行搜索扫描文件,将输入的每行分割成字段,将输入行或字段与模式进行比较,并对匹配的结果执行操作。

本节将使用sub和gsub函数和awk命令来删除文件中的制表符和空格。我们将使用以下文本文件作为本文中所有示例的输入文件:

[root@localhost ~]# cat << EOF >> content.txt

出现大于号时将一下内容复制到终端,将文本内容保存到content.txt文件中。

        hitesh engineer sales 30000jayesh director account 25000vyom manager purchase 20000bhavesh engineer sales 30000 rajesh directory sales 40000niraj clerk account 20000jay peon purchase 23000deep clerk sales 20000EOF


                               
登录/注册后可看大图

删除文件中的所有空白行

可以使用awk的特殊变量NF,从文件中删除所有空白行。例如,删除文件content.txt中的所有空白行。

[root@localhost ~]# awk NF content.txt


                               
登录/注册后可看大图

删除每行开头或者末尾的空格和制表符

使用awk命令在文件开头找到一个或多个空格或制表符并删除。可以使用以下命令:

[root@localhost ~]# awk '{ sub(/^[ \t]+/, ""); print }' content.txt


                               
登录/注册后可看大图

命令行中的意思是:使用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


                               
登录/注册后可看大图

添加行号为每行内容

使用以下命令使用NF内置变量对非空行进行编号:

[root@localhost ~]# awk 'NF { $0=++a ": " $0 }; { print }' content.txt


                               
登录/注册后可看大图

打印包含特定字符串的行数

使用以下命令来打印包含engineer的总行数:

[root@localhost ~]# awk '/engineer/{n++}; END {print n+0}'  content.txt


                               
登录/注册后可看大图

打印与指定字符串匹配的行

下面实例中,筛选出含有 engineer字符串的行:

[root@localhost ~]# awk '/engineer/' content.txt


                               
登录/注册后可看大图

打印与指定字符串不匹配的行

下面实例中,打印不包含字符串 jayesh 的行:

[root@localhost ~]# awk '!/jayesh/' content.txt


                               
登录/注册后可看大图

替换字符串

实例一:将content.txt中的字符串“ engineer”替换为“ doctor”,用到gsub()函数:

[root@localhost ~]# awk '{gsub(/engineer/,"doctor")}{print}' content.txt


                               
登录/注册后可看大图

实例二:查找字符串“ jayesh”,“ hitesh”或“ bhavesh”,并将其替换为字符串“ mahesh”,运行以下命令:

[root@localhost ~]# awk '{gsub(/jayesh|hitesh|bhavesh/ , "mahesh"); print}' content.txt


                               
登录/注册后可看大图

配合df命令,显示磁盘空间

可以将awk命令与df一起使用,只显示设备名称和可用空间、使用率。

[root@localhost ~]# df -h | awk '{printf("%-24s \t %-6s \t %-4s \n",$1,$4,$5)}'


                               
登录/注册后可看大图

查看每个IP打开的连接数

如果认为服务器受到攻击,那么这种awk单行代码非常有用。它将显示服务器的打开连接列表,并按数量对它们进行排序。

[root@localhost ~]# netstat -ntu|awk '{print $5}'|cut -d: -f1|awk '/[0-9]/'|sort|uniq -c|sort -n


                               
登录/注册后可看大图

总结

我们通过实际示例了解如何使用一行awk命令执行日常任务。


您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-1-23 20:17 , Processed in 0.057715 second(s), 9 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表