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命令执行日常工作。