• awk基本用法


    awk基本用法

    awk 更适合格式化 文本内容,对文本进行复杂的处理

    awk 语法

    awk [options 可选参数] pattern(模式) {action(动作)} file(文件)

    awk常用参数

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

    awk常用内置变量

    内置变量 解释
    $n 指定分隔符后,当前记录的第n个字段(列)
    $0 完整的输入记录
    FS 输入字段分割符,默认是空格
    OFS 输出字段分隔符,默认是空格
    RS 输入记录分隔符(输入换行符),指定输入时的换行符
    ORS 输出记录分隔符(输出换行符),输出时用指定符号代替换行符
    NF(Number of fields:字段数) 分割后,当前行一共有多少个字段
    NR(Number of records:记录数) 当前记录数,行数
    FNR 各文件分别计数的行号
    FILENAME 当前文件名
    ARGC ARGC:命令行参数的个数
    ARGV ARGV:数组,保存的命令行所给定的各参数

    自定义输出内容:awk,必须外层单引号,内层双引号。内置变量$1,$2都不得添加双引号,否则会识别为文本。

    显示文件第五行
    
    awk  "NR==5" pwd.txt
    
    显示文件2到5行
    
    awk  "NR==2,NR==5"  pwd.txt
    
    显示3到5行并显示行号
    
    awk 'NR==3,NR==5{print NR,$0}'   pwd.txt 
    
    显示第一行 倒数第二行最后一行
    
    awk -F ":" '{print NR,$1,$(NF-1),$NF}'   pwd.txt
    
    取出IP地址信息
    
    ifconfig ens33|awk 'NR==2{print $2}'
    

    awk分隔符

    • 输入分隔符 awk默认是空格,空白字符,英文field separate(字段分隔符) ,变量名是FS

    • 输出分隔符 output field separate(输出字段分开) ,简称OFS。

    FS输入分隔符:awk逐行处理文本的时候,以输入分隔符为准,把文本切成多个片段,默认符号是空格,当我们处理特殊文件,没有空格的时候,可以自由指定分割符特点。如下

    awk -F ":"    模式   动作      文件
    awk -V FS=":"  模式   动作    文件
    

    OFS输出分隔符:awk执行完命令,默认用空格隔开一列,这个空格就是awk的默认输出符,如下

    awk -F ":" -V OFS="-----"   模式   动作   文件
    

    awk变量

    内置变量 NR NF FNR

    • awk 的内置变量NR NF 是不用添加$符号
    • 而 $1,$2 是需要添加符号的。

    输出每行行号以及字段总个数

    awk  '{print NR,$0}'  pwd.txt 
    

    输出每行行号以及指定的列

     awk  '{print NR,$1,$5}' pwd.txt 
    

    处理多个文件显示行号

    # 普通的NR变量,会将多个文件按照顺序排序
     awk '{print NR,$0}' pwd.txt if.txt 
    # 使用FNR变量,可以分别对文件行数计数
    awk '{print FNR,$0}' pwd.txt if.txt 
    

    RS 变量作用是 输入分隔符,默认是回车符,也就是回车换行符,我们可以自定义 空格 作为 行分隔符,每遇见一个空格,就换行处理

    awk   -v RS=" " '{print FNR,$0}' pwd.txt 
    

    ORS内置变量作用是输出分隔符的意思,awk默认认为,每一行结束了,就得添加回车换行符,ORS变量可以更改输出符

    awk -v ORS="@@@" '{print NR,$0}'  pwd.txt 
    

    内置变量FILENAME

    显示正在处理的文件名
    awk -F ":" '{print FILENAME,NR,$0}'  pwd.txt
    

    awk格式化输出

    printf 和print的区别
    format(格式)的使用
    1.其与print的最大不同是,printf需要指定format
    format用于指定后面的每个item(项目)的输出格式
    printf语句不会自动打印换行符:\n
    format格式的指示符都是以%开头,后跟一个字符如下
    %c :显示字符的ASCII码
    %d,%i :十进制整数
    %e,%E :科学计数法显示数值
    %f :显示浮点数
    %g,%G :以科学计数法的格式或浮点数的格式显示数值
    %s :显示字符串
    %u :无符号整数
    %% :显示自身
    printf修饰符
    -:左对齐,默认右对齐
    +:显示数值符号
    
    

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

    awk的模式

    • BEGIN 就是处理文本前,先执行BEGIN模式指定的动作

    • awk 'BEGIN{print "我是三剑客"}{print $0}' pwd.txt
      
    • END 就是处理完所有文本之后,需要执行的动作

     awk '{print $0} END{print "三剑客学完啦"}' pwd.txt 
    
    关系运算符 解释 示例
    < 小于 x<y
    <= 小于等于 x<=y
    == 等于 x=y
    != 不等于 x!=y
    >= 大于等于 x>=y
    > 大于 x>y
    ~ 匹配正则 x~/正则/
    !~ 不匹配正则 x!~/正则/

    awk使用正则语法

    找出文件中有games的行
    
    awk '/^games/{print $0}' pwd.txt 
    
    取出IP地址
    
    ifconfig ens33|awk 'NR==2{print $2}' 
    
    找出pwd.txt 中禁止登陆的用户
    
    awk '/\/sbin\/nologin/{print NR,$0}' pwd.txt 
    
  • 相关阅读:
    图形化编程娱乐于教,Kittenblock实例,角色对话
    图形化编程娱乐于教,Kittenblock实例,角色旋转方式
    图形化编程娱乐于教,Kittenblock实例,蝙蝠侠在宇宙中的坐标位置
    图形化编程娱乐于教,Kittenblock实例,角色移动,面向方向
    图形化编程娱乐于教,Kittenblock实例,角色移动
    图形化编程娱乐于教,Kittenblock实例,确认坐标
    图形化编程娱乐于教,Kittenblock实例,计算跑步距离
    图形化编程娱乐于教,Kittenblock实例,角色上跳效果
    图形化编程娱乐于教,Kittenblock实例,提问机器
    图形化编程娱乐于教,Kittenblock实例,数数,说出5的倍数
  • 原文地址:https://www.cnblogs.com/bb9527/p/14197953.html
Copyright © 2020-2023  润新知