美文网首页
10个超级棒的Awk命令

10个超级棒的Awk命令

作者: iBioinformatics | 来源:发表于2022-09-20 19:20 被阅读0次

    https://mp.weixin.qq.com/s/OVsE8d42ivsqLADzvVCP-w

    Awk命令是处理数据的强大工具。它获取输入数据,对其进行操作,并在标准输出中给出结果。可以对文件的行和列执行各种操作。要有效地处理数据,了解“awk”命令的基本要素是非常重要的,这篇文章将涵盖“awk”命令的关键特性。让我们先看看语法:$ awk [options] [file]下表列出了一些常用的选项:

    | 选项 | 说明 |
    | -F | To specify a file separator |
    | -f | 指定包含“awk”脚本的文件 |
    | -v | 指定变量 |

    让我们看一些有关“ awk”命令用法的示例,为了演示,我新建了一个文本文件,名称为linuxmi.com.txt:1、如何使用awk命令打印文件的列?“ awk”命令可用于获取文本文件的特定列。要打印文件的内容,请使用:linuxmi@linuxmi:~/www.linuxmi.com$ cat linuxmi.com.txt

    [图片上传失败...(image-58f456-1663658800720)]

    现在,打印文件的第二列,使用:linuxmi@linuxmi:~/www.linuxmi.comawk '{print2}' linuxmi.txt[图片上传失败...(image-23712e-1663658800720)]

    要打印多个字段,使用命令:linuxmi@linuxmi:~/www.linuxmi.comawk '{print1,2,3}' linuxmi.txt[图片上传失败...(image-384d6-1663658800720)]

    如果你不使用逗号“,”,那么输出将没有空格:linuxmi@linuxmi:~/www.linuxmi.comawk '{print123}' linuxmi.txt[图片上传失败...(image-2941e1-1663658800720)]

    更新地址:https://www.linuxmi.com/10-awk-mingling.html****2、如何使用正则表达式与awk命令:为了匹配字符串或任何表达式,我们使用斜杠" // ",例如,如果你想打印正在学习"lishi"的人的名字,那么使用:linuxmi@linuxmi:~/www.linuxmi.comawk '/历史/{print2}' linuxmi.txt
    张三
    方咪[图片上传失败...(image-4922f9-1663658800720)]

    输出清楚地表明,只有“张三”和“方咪”正在学习“历史”课程。3、如何通过“awk”命令使用关系表达式:为了匹配特定字段的内容,可以使用关系表达式。要将任何字符串或表达式与字段进行匹配,请指示该字段,并使用比较符“〜”与以下命令中显示的模式进行比较:linuxmi@linuxmi:~/www.linuxmi.comawk '3 ~/语/ {print $2}' linuxmi.txt
    陈明
    鱼鱼[图片上传失败...(image-c6b98d-1663658800720)]

    上面的输出显示第2列中的每个字段与第3列中包含“语”的每个字段的对比。要获得上述命令的相反输出,请使用“! ”运算符:linuxmi@linuxmi:/www.linuxmi.comawk '3!~/语/ {print $2}' linuxmi.txt[图片上传失败...(image-317a5d-1663658800720)]

    为了进行比较,我们还可以使用大于“>”,小于“ <”和等于“ =”的运算符:linuxmi@linuxmi:~/www.linuxmi.comawk '4>81 {print $2}' linuxmi.txt
    李华
    方咪[图片上传失败...(image-76a044-1663658800720)]

    输出显示了获得81分以上得分的人员的姓名。4、如何通过awk命令使用范围模式:范围也可以用于搜索;只需使用逗号“,”来分隔范围,如下面提到的命令所示:linuxmi@linuxmi:~/www.linuxmi.comawk '/李四/,/陈明/ {print3}' linuxmi.txt输出显示第2列中从“李四”到“陈明”之间的课程。请参见下面的示例:[图片上传失败...(image-e25f61-1663658800720)]

    linuxmi@linuxmi:~/www.linuxmi.comawk '4==87,4==91 {print2}' linuxmi.txt输出显示第2列中人员的姓名,第4列中标记“ 87到91”的范围。[图片上传失败...(image-c97a7a-1663658800720)]

    5、如何使用逻辑运算符组合模式:使用逻辑运算符(例如OR“ ||”,“ &&&”)可以组合模式进行搜索。使用以下命令linuxmi@linuxmi:~/www.linuxmi.comawk '4>81 && 6>0.4 {print2}' linuxmi.txt
    李华
    方咪[图片上传失败...(image-ff2a6c-1663658800720)]

    上面的命令将在第四个字段上打印大于81的人名,在第六个字段上打印大于0.4的人名。并且只有两个记录满足条件。6、awk命令的特殊表达式:有两个特殊表达式,“ BEGIN”和“ END”:开始:在处理数据之前执行操作结束:在处理完数据后执行一项操作linuxmi@linuxmi:~/www.linuxmi.comawk 'BEGIN {print "处理已经开始"}; {print2}; END {print "处理已结束"}' linuxmi.txt[图片上传失败...(image-1481f5-1663658800720)]

    7、awk命令的有用的内置变量:awk命令具有各种有助于数据处理的变量:

    | 变量 | 说明 |
    | NF | 它给出了数据中字段的数量 |
    | NR | 给出当前记录的编号 |
    | FILENAME | 显示当前正在处理的文件的名称 |
    | FS 和 OFS | 字段分隔符和输出字段分隔符 |
    | RS 和 ORS | 分离记录和输出记录分隔符 |

    示例:linuxmi@linuxmi:~/www.linuxmi.com$ awk 'END{print "文件名是 ", FILENAME, "有", NF, "个字段和", NR, "个记录"}' linuxmi.txt我们使用“ END”,但是如果使用“ BEGIN”,则输出将给出0个字段和0个记录。[图片上传失败...(image-e6d046-1663658800720)]

    8、如何更改记录分隔符:记录中的默认分隔符通常为空格;如果有逗号“,”或点“。”作为字段分隔符,然后将“ FS”选项与分隔符一起使用。我们再来看一个文件,其中的数据字段之间用逗号“:”隔开:linuxmi@linuxmi:~/www.linuxmi.comcat linuxmi.txt linuxmi@linuxmi:~/www.linuxmi.com awk 'BEGIN {FS=":"}{print $2}' linuxmi.txt[图片上传失败...(image-164672-1663658800720)]

    由于文件的分隔符是冒号,但是“ awk”命令甚至对此类文件也很有用,因此只需使用“ FS”选项即可。也可以使用“ -F”:linuxmi@linuxmi:~/www.linuxmi.comawk -F ":" '{print2}' linuxmi.txt默认记录分隔符为“换行符”,并将记录分隔符设置为“:”,请使用:linuxmi@linuxmi:~/www.linuxmi.comawk 'BEGIN{RS=":"}{print1}' linuxmi.txt[图片上传失败...(image-8769e4-1663658800720)]

    9、Awk Actions:Awk Actions是由“{}”括号括起来的小程序,它有多个用分号“;”分隔的语句。使用“ awk”命令最常用的语句是“ print”语句。例如,要打印每条记录的文本,请在引号中使用文本字符串:linuxmi@linuxmi:~/www.linuxmi.comawk '{print "Linux迷 www.linuxmi.com,"2}' linuxmi.com.txt[图片上传失败...(image-897a13-1663658800720)]

    让我们使用awk执行简单的求和运算:linuxmi@linuxmi:~/www.linuxmi.comawk '{sum +=4} END {printf "%d\n", sum}' linuxmi.com.txt[图片上传失败...(image-771b08-1663658800720)]

    10、创建awk程序:让我们从“ awk”编程开始,下面给出的编程只是在做乘法:### Linux迷 www.linuxmi.com ###

    Linux迷 www.linuxmi.com

    Linux迷 www.linuxmi.com

    BEGIN {
    i=2
    while(j<4)
    {
    print "The multiplication of 2 with" j " is " i*j;
    j++
    }
    }[图片上传失败...(image-3075d7-1663658800720)]

    用“linuxmi.awk”的名称保存程序并运行,打开终端并输入:linuxmi@linuxmi:~/www.linuxmi.com$ awk -f linuxmi.awk[图片上传失败...(image-265d6a-1663658800720)]

    总结:“awk”命令是一种方便的命令,用于处理,扫描文本文件的数据,例如分隔文件的任何特定字段;我们使用“ awk”命令。它使从文本文件中以任何形式或模式搜索任何内容变得更加容易。在本指南中,我们了解“ awk”命令的基本知识及其用法。“ awk”命令可验证数据,生成报告,甚至解析文件。使用简单的命令“ awk”还可以使用户编写微型程序来更有效地处理数据。

    相关文章

      网友评论

          本文标题:10个超级棒的Awk命令

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