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.txtgsub函数表示满足条件,替换所有的匹配字符。 倒序列出文件中的所有行
它记录数组中的所有行,并将它们以相反的顺序排列。使用以下命令: [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命令执行日常任务。
|