乐趣区

关于运维:如何使用awk处理文本内容

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
如何应用 awk 解决文本内容如何应用 awk 解决文本内容

删除文件中的所有空白行
能够应用 awk 的非凡变量 NF, 从文件中删除所有空白行。例如,删除文件 content.txt 中的所有空白行。

[root@localhost ~]# awk NF content.txt
如何应用 awk 解决文本内容如何应用 awk 解决文本内容

删除每行结尾或者开端的空格和制表符
应用 awk 命令在文件结尾找到一个或多个空格或制表符并删除。能够应用以下命令:

[root@localhost ~]# awk ‘{sub(/^[ \t]+/, “”); print }’ content.txt
如何应用 awk 解决文本内容如何应用 awk 解决文本内容
命令行中的意思是:应用 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
如何应用 awk 解决文本内容如何应用 awk 解决文本内容

增加行号为每行内容
应用以下命令应用 NF 内置变量对非空行进行编号:

[root@localhost ~]# awk ‘NF {$0=++a “: ” $0}; {print}’ content.txt
如何应用 awk 解决文本内容如何应用 awk 解决文本内容

打印蕴含特定字符串的行数
应用以下命令来打印蕴含 engineer 的总行数:

[root@localhost ~]# awk ‘/engineer/{n++}; END {print n+0}’ content.txt
如何应用 awk 解决文本内容如何应用 awk 解决文本内容

打印与指定字符串匹配的行
上面实例中,筛选出含有 engineer 字符串的行:

[root@localhost ~]# awk ‘/engineer/’ content.txt
如何应用 awk 解决文本内容如何应用 awk 解决文本内容

打印与指定字符串不匹配的行
上面实例中,打印不蕴含字符串 jayesh 的行:

[root@localhost ~]# awk ‘!/jayesh/’ content.txt
如何应用 awk 解决文本内容如何应用 awk 解决文本内容

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

[root@localhost ~]# awk ‘{gsub(/engineer/,”doctor”)}{print}’ content.txt
如何应用 awk 解决文本内容如何应用 awk 解决文本内容
实例二:查找字符串“jayesh”,“hitesh”或“bhavesh”,并将其替换为字符串“mahesh”,运行以下命令:

[root@localhost ~]# awk ‘{gsub(/jayesh|hitesh|bhavesh/ , “mahesh”); print}’ content.txt
如何应用 awk 解决文本内容如何应用 awk 解决文本内容

配合 df 命令,显示磁盘空间
能够将 awk 命令与 df 一起应用,只显示设施名称和可用空间、使用率。

[root@localhost ~]# df -h | awk ‘{printf(“%-24s \t %-6s \t %-4s \n”,$1,$4,$5)}’
如何应用 awk 解决文本内容如何应用 awk 解决文本内容

查看每个 IP 关上的连接数
如果认为服务器受到攻打,那么这种 awk 单行代码十分有用。它将显示服务器的关上连贯列表,并按数量对它们进行排序。

[root@localhost ~]# netstat -ntu|awk ‘{print $5}’|cut -d: -f1|awk ‘/[0-9]/’|sort|uniq -c|sort -n
如何应用 awk 解决文本内容如何应用 awk 解决文本内容

总结
咱们通过理论示例理解如何应用一行 awk 命令执行日常工作。

退出移动版