• Linux---awk


    Linux三剑客之一awk

    简单介绍一下awk的用法

    再谈三剑客

    grep awk sed 三个并称Linux的三剑客
    awk:适合编辑,处理匹配到的文本内容
    grep:擅长单纯的查找或匹配文本内容
    链接: Linux—grep
    sed:适合格式化文本内容,对文本进行复杂处理
    链接: Linux—sed



    awk

    awk有强大的文本格式化的能力,好比将一些文本数据格式化成专业的excel表的样式。
    awk早期在unix上实现,用的是gawk,是GUN awk的意思。
    awk更是一门编程语言,支持条件判断,数组,循环等功能。


    语法

    awk  [option] 'pattern[action]' file
    
    • 1

    options awk可选参数
    pattern 模式
    action 动作(awk擅长文本格式化,且输出格式化后的结果,因此最常用的动作就是print和printf)
    file 处理文件

    用法

    这里用到的 文件为 123.txt
    在这里插入图片描述

    对awk而言,变量分为
    内置变量
    自定义变量

    内置变量

    变量含义
    $n指定分隔符后,当前记录的第n个字段
    $0完整的输入记录
    FS字段分隔符,默认是空格
    NF当前记录数,行数
    NRman wak

    更多内置变量可以man手册查看--------man awk
    在这里插入图片描述

    awk '{print $2}' 123.txt//取出第二列
    $0 代表一整行  =awk '{print}' 123.txt
    $1 代表第一列
    ······
    这里执行的命令没有使用参数和模式,$2表示输出文本的第二列信息
    awk默认以空格为分隔符,且多个空格也识别为一个空格,作为分隔符
    awk是按行处理文件,一行处理完毕,处理下一行,根据用户指定的分隔符去工作,没有指定则默认空格
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    awk '{print $1,$3}' 123.txt//,代表空格 显示第一行,第三行
    
    • 1

    在这里插入图片描述

    自定义输出

    awk '{print "list1: "$1,"list2: "$3}' 123.txt //按要求输出第一行,第三行
    awk 必须 外层单引号,内层双引号
    内置变量$1,$2都不能添加双引号,否则会识别为文本
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    awk 'NR==5{print $0}' 123.txt//显示文件第五行
    awk 'NR==5,NR==6{print $0}' 123.txt//显示文件第五行,第六行
    
    • 1
    • 2

    在这里插入图片描述

    awk '{print NR,$0}' 123.txt//显示每一行的行号和cat -n的操作一样
    
    • 1

    在这里插入图片描述

    awk 'NR==37,NR==40{print NR,$0}' pwd.txt//37-40行的行号和信息显示出来
    
    • 1

    在这里插入图片描述

    awk '{print $1, NF-1}' 123.txt//打印到数第二列
    
    • 1

    在这里插入图片描述

    awk参数

    参数含义
    -F指定分隔字段符
    -v定义或修改一个awk内部变量
    -f从脚本文件中读取awk命令

    awk默认以空格为分隔符,这里可以指定分隔符

    awk -F ":" '{print $1}' pwd.txt //指定 :为分隔符打印第一列
    
    • 1

    在这里插入图片描述

    除了使用-F选项,还可以使用变量的形式,指定分隔符,使用-v搭配选项,修改FS变量
    awk -v FS=“:” ‘{print 1 , 1, 1,NF}’ pwd.txt

    在这里插入图片描述

    awk -F ":" -v OFS="===" '{print $1,$NF}' pwd.txt  //以:分隔,输出时添加===
    
    • 1

    在这里插入图片描述

    print打印格式

    print打印会自动换行

    在这里插入图片描述

    printf打印不会自动换行

    在这里插入图片描述

    若想要效果一样则需要格式化字符串
    awk ‘{printf “%s\n”,$2}’ abc.txt

    在这里插入图片描述

    模式pattern

    awk默认是按行处理文本,如果不指定任何模式(条件),awk默认一行行处理
    如果指定了模式,只有符合模式才会被处理

    BEGIN模式

    处理文本之前做的动作

    awk 'BEGIN{print "文件夹里有"}{print $2}' abc.txt  
    
    • 1

    在这里插入图片描述

    END模式

    处理完所有行之后执行的操作

    awk 'BEGIN{print "处理文本之前"}{print $2}END{print "处理文本之后执行该语句"}' abc.t
    
    • 1

    在这里插入图片描述

    关系运算符模式

    在这里插入图片描述

    awk 'NR==2{print $0}' abc.txt //输出第二行
    awk 'NR!=2{print $0}' abc.txt/输出第二行以外的行
    
    • 1
    • 2

    在这里插入图片描述

    自定义内置变量

    awk -F":" 'BEGIN{printf "%-30s%-30s%-30s\t%-30s\t\n","用户名","用户ID","用户家目录","用户解释器"}{printf "%-30s\t%-30s\t%-30s\t%-30s\t\n",$1,$3,$6,$7}' pwd.txt
    
    • 1

    在这里插入图片描述

    正则表达式

    正则表达式主要与awk的pattern模式结合使用

    语法

    awk '/正则表达式/动作' file
    
    • 1

    与 grep ‘正则表达式’ pwd.txt效果一致
    但是awk配合pattern模式使用更为好用

    awk '/^games/{print $0}' pwd.txt//找出pwd.txt文件中的games行
    
    • 1

    在这里插入图片描述

    awk -F ":" '/^games/{print $1,$NF}' pwd.txt  //以:为分隔符找出pwd.txt文件中gams的第一列和最后一列
    
    • 1

    在这里插入图片描述

  • 相关阅读:
    DHorse系列文章之日志收集
    go-协程调度学习笔记
    Linux | 进程间通信 | system V共享内存 | 介绍和使用
    视频产生的本质及色彩空间:RGB 和 YUV
    kubernetes 高可用集群
    yolo报错indexerror: list index out of range
    基于移动互联网的短视频APP设计
    【Flutter 问题系列第 79 篇】在 Flutter 中使用 ReorderableListView 实现拖拽排序列表组件的功能
    CSS 3D变换 transform3D
    大数据下一代变革之必研究数据湖技术Hudi原理实战双管齐下-中
  • 原文地址:https://blog.csdn.net/weixin_43240150/article/details/128132546