美文网首页
如何使用awk处理文本内容

如何使用awk处理文本内容

作者: 老率的IT私房菜 | 来源:发表于2021-08-19 14:25 被阅读0次

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的特殊变量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命令执行日常任务。

相关文章

  • 如何使用awk处理文本内容

    Awk是为高级文本处理而设计的非常强大的工具。它逐行搜索扫描文件,将输入的每行分割成字段,将输入行或字段与模式进行...

  • 常用命令(持续更新)

    处理文本常用单行命令,持续更新~1.awk 匹配两个文件内容### Linux Shell中使用awk完成两个文件...

  • 常用命令-awk

    awk是Linux处理文本的利器,在linux日常处理中,发挥很重要的作用,学会使用awk可以让你的处理文本工作事...

  • Awk 命令详解

    [TOC] 简介 我们常在命令行中使用awk命令提取转换文件文本内容,可以说,awk是命令行中文本处理的瑞士军刀,...

  • 【linux编程】Linux文本处理三剑客——awk

    awk 基本语法: awk 是逐行处理文本内容的; BEGIN{} 是初识化代码块,在处理文件第一行内容之前,定义...

  • awk命令详解

    背景 AWK是一种处理文本文件的语言,是一个强大的文本分析工具 awk的基本用法 文本内容: 2 this is ...

  • Linux命令

    AWK - 行文本处理工具 原理: 逐行处理文本数据语法: awk 'pattern + {action}'...

  • <总结向> awk使用手册

    awk 用于文本文件的分析与处理 0x00 使用方法 awk '{pattern + action}' [file...

  • note_17.3_awk

    GNU awk: 文本处理三工具:grep, sed, awk grep, egrep, fgrep:文本过滤工具...

  • 2020-01-17

    centOS 中awk命令中分隔符含有'[ ]' 使用awk处理文本时,若指定的分隔符包含中括号(比如要使用'[a...

网友评论

      本文标题:如何使用awk处理文本内容

      本文链接:https://www.haomeiwen.com/subject/yjtabltx.html