如何使用awk处理文本内容

Awk是为高级文本处理而设计的非常强大的工具。它逐行搜索扫描文件,将输入的每行分割成字段,将输入行或字段与模式进行比较,并对匹配的结果执行操作。

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

[root@localhost ~]# cat > 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的特殊变量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命令执行日常任务。

(0)

相关推荐

  • 如何将百度文库中的文本内容复制下来

    众所周知,百度文库可以给我们提供很多有用的文档,是个很有价值的文档网站,那么我们如何将有用的内容复制下来呢?其实并不难,下面是一些方法介绍.  具体如下:1.百度文库中的文档格式包括DOC,PPT,P ...

  • Beyond Compare精确查找文本内容方法

    Beyond Compare精确查找文本内容方法 打开Beyond Compare软件,选择文本比较会话,打开会话操作界面.单击"打开文件"按钮,选择需要比较的文本文件. Beyo ...

  • 使用awk输出文本中的字段和列的方法

    首先我们要知道,awk 能够自动将输入的行,分隔为若干字段.每一个字段就是一组字符,它们和其他的字段由一个内部字段分隔符分隔开来. 如果你熟悉 Unix/Linux 或者懂得 bash shell 编 ...

  • Word2016文件怎么超链接同一文档中对部分文本内容?

    word2016中想要对部分文字创建超链接,自动跳转至文档中的其他文本内容,该怎么制作超链接呢?下面我们就来看看详细的教程. 1.选中需要跳转至的文本内容,选择工具选项卡[插入]下的[书签]. 2.输 ...

  • word2010如何快速选定文本内容?

    word是我们经常使用的办公软件,word的使用有很多方法技巧,掌握了这些方法技巧,能够极大的提高我们的工作效率,使工作变得轻松自如.那么word2010如何快速选定文本内容?下面小编就为大家介绍一下 ...

  • excel怎么快速将文本内容合并到一个单元格?

    当excel中有大量文本内容需要合并到一个单元格中时是件非常繁琐的事情,那么如何快速将文本内容合并到一个单元格中呢,下面就为大家详细介绍一下,来看看吧! 步骤 1.打开电脑中的excel2010 2. ...

  • Excel中怎么截取文本内容? Excel单元格批量截取数据的教程

    怎么快速截取单元格文本内容呢?当要处理的单元格数量较多时,逐一编辑单元格将显得很繁琐,当然也可以借助Left.Right或Mid等函数来截取单元格文本,但这种操作无法直接在单元格内完成.以下小编为大家 ...

  • 如何在PDF文件中修改或添加文本内容?

    相信很多小伙伴在日常办公中都会见到很多PDF文件,如果我们想要在其中修改或添加文本内容该怎么做呢?方法很简单,下面小编就来为大家介绍.具体如下:1. 首先,打开电脑上的PDF编辑器.进入后,点击页面上 ...

  • 如何在华为手机中将联系人信息转换为文本内容发送?

    相信很多小伙伴都有在使用华为手机,在其中如何才能将联系人信息转换为文本内容发送呢?方法很简单,下面小编就来为大家介绍.具体如下:1. 首先,打开手机上的短信应用,如下图箭头所指处:2. 进入短信页面后 ...

  • 怎么将电脑word软件内的文本内容设置为方格稿纸样式

    当我们在使用电脑的时候,可以通过word软件来处理文本内容,那么如何将页面样式设置为方格稿纸样式呢?接下来就由小编来告诉大家.具体如下:1. 第一步,打开电脑中的一个word文档,如下图为日常使用的文 ...