LinuxProbe 发表于 2021-8-19 14:25:22

如何使用awk处理文本内容


Awk是为高级文本处理而设计的非常强大的工具。它逐行搜索扫描文件,将输入的每行分割成字段,将输入行或字段与模式进行比较,并对匹配的结果执行操作。
本节将使用sub和gsub函数和awk命令来删除文件中的制表符和空格。我们将使用以下文本文件作为本文中所有示例的输入文件:# 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 20000EOFhttps://www.linuxprobe.com/wp-content/uploads/2020/10/image1-1.png删除文件中的所有空白行
可以使用awk的特殊变量NF,从文件中删除所有空白行。例如,删除文件content.txt中的所有空白行。# awk NF content.txt https://www.linuxprobe.com/wp-content/uploads/2020/10/image2-1.png删除每行开头或者末尾的空格和制表符
使用awk命令在文件开头找到一个或多个空格或制表符并删除。可以使用以下命令:# awk '{ sub(/^[ \t]+/, ""); print }' content.txthttps://www.linuxprobe.com/wp-content/uploads/2020/10/image3-1.png
命令行中的意思是:使用sub函数找到开头是制表符和空格的行,并替换空格和制表符为空。注意:sub()函数替换只发生在第一次匹配的时候,也就是一行中有多个空格或多个制表符,只替换左面的第一个。删除末尾的空格和制表符可以使用下面的命令:# awk '{ sub(/[ \t]+$/, ""); print }' content.txt同时查询开头和末尾的空格和制表符,可以使用下面命令:# awk '{ gsub(/^[ \t]+|[ \t]+$/, ""); print }' content.txtgsub函数表示满足条件,替换所有的匹配字符。倒序列出文件中的所有行
它记录数组中的所有行,并将它们以相反的顺序排列。使用以下命令:# awk '{ b = $0 } END { for (j=i-1; j>=0;) print b }' content.txthttps://www.linuxprobe.com/wp-content/uploads/2020/10/image4.png添加行号为每行内容
使用以下命令使用NF内置变量对非空行进行编号:# awk 'NF { $0=++a ": " $0 }; { print }' content.txt https://www.linuxprobe.com/wp-content/uploads/2020/10/image5.png打印包含特定字符串的行数
使用以下命令来打印包含engineer的总行数:# awk '/engineer/{n++}; END {print n+0}'content.txthttps://www.linuxprobe.com/wp-content/uploads/2020/10/image6.png打印与指定字符串匹配的行
下面实例中,筛选出含有 engineer字符串的行:# awk '/engineer/' content.txt https://www.linuxprobe.com/wp-content/uploads/2020/10/image7.png打印与指定字符串不匹配的行
下面实例中,打印不包含字符串 jayesh 的行:# awk '!/jayesh/' content.txt https://www.linuxprobe.com/wp-content/uploads/2020/10/image8.png替换字符串
实例一:将content.txt中的字符串“ engineer”替换为“ doctor”,用到gsub()函数:# awk '{gsub(/engineer/,"doctor")}{print}' content.txt https://www.linuxprobe.com/wp-content/uploads/2020/10/image9.png
实例二:查找字符串“ jayesh”,“ hitesh”或“ bhavesh”,并将其替换为字符串“ mahesh”,运行以下命令:# awk '{gsub(/jayesh|hitesh|bhavesh/ , "mahesh"); print}' content.txt https://www.linuxprobe.com/wp-content/uploads/2020/10/image10.png配合df命令,显示磁盘空间
可以将awk命令与df一起使用,只显示设备名称和可用空间、使用率。# df -h | awk '{printf("%-24s \t %-6s \t %-4s \n",$1,$4,$5)}'https://www.linuxprobe.com/wp-content/uploads/2020/10/image11.png查看每个IP打开的连接数
如果认为服务器受到攻击,那么这种awk单行代码非常有用。它将显示服务器的打开连接列表,并按数量对它们进行排序。# netstat -ntu|awk '{print $5}'|cut -d: -f1|awk '//'|sort|uniq -c|sort -nhttps://www.linuxprobe.com/wp-content/uploads/2020/10/image12.png总结
我们通过实际示例了解如何使用一行awk命令执行日常任务。
页: [1]
查看完整版本: 如何使用awk处理文本内容