• 正则表达式和文本处理工具二


    一:整理博客,内容包含awk、变量、运算符、if多分支

         awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

    -F 定义字段分隔符,默认的分隔符是连续的空格或制表符

    使用option中的-F参数定义间隔符号

    用$1,$2,$3等的顺序表示files中每行以间隔符号分隔的各列不同域

    NF变量表示当前记录的字段数

    -v 定义变量并赋值 也可以借用次方式从shell变量中引入

    定址方法: 正则,变量,比较和关系运算

    正则需要用//包围起来 
    ^ 行首
    $ 行尾
    . 除了换行符以外的任意单个字符
    * 前导字符的零个或多个
    .* 所有字符
    [] 字符组内的任一字符
    [^] 对字符组内的每个字符取反(不匹配字符组内的每个字符)
    ^[^] 非字符组内的字符开头的行
    [a-z] 小写字母
    [A-Z] 大写字母
    [a-Z] 小写和大写字母
    [0-9] 数字
    < 单词头 单词一般以空格或特殊字符做分隔,连续的字符串被当做单词
    > 单词尾

    AWK变量

    NR变量定址 
    NR 表示AWK读入的行数
    FNR表示读入行所在文件中的行数

    NR 当前记录的个数(全部文件连接后的统计) 
    FNR 当前记录的个数(仅为当前文件的统计,非全部)
    FS 字段分隔符 默认为连续空格或制表符,可以使用多个不同的符号做分隔符 -F[:/]
    OFS 输出字符的分隔符 默认是空格

    运算符
    + - * / % ++ --
    转义序列
    \ 自身
    $ 转义$
    制表符
     退格符
    回车符
    换行符
    c 取消换行

         if是条件判断语句,只有if的条件成立(表达式的值为真)后,才会执行if部分的代码,否则将会执行else的代码。如果是if... if,则必须满足第一个if同时满足第二个if,才会执行后面的代码。 

    Linux Shell : Test命令参数解析

    格式: test conditions
    test -n string : string 不为空 
    test -z string : string 为空

    test int1 -eq int2  : int1 == int 2
    test int1 -ne int2  : int1 != int2 
    test int1 -gt int2   : int1 > int2 
    test int1 -ge int2  : int1 >= int2 
    test int1 -lt int2    : int1 < int2 
    test int1 -le int2   : int1 <= int2
    test -r filename   : 用户对文件filename有读权限
    test -w filename  : 用户对文件filename有写权限
    test -x filename   : 用户对文件filename有可执行权限
    test -f filename   : 文件filename为普通文件
    test -d filename  : 文件filename为目录
    test -c filename  : 文件filename为字符设备文件
    test -b filename  :文件filename为块设备文件
    test -s filename  : 文件filename大小不为零
    test -t fnumb      : 与文件描述符fnumb(默认值为1)相关的设备是一个终端设备
    test ! -s empty   : empty 为空
    test -a       : And 
    test -o       : Or
    注意test命令和[ ]中括号作用是一样的

    二:awk文本处理
    打印uid在30~40范围内的用户名。

    #awk -F: '$3 >=30 && $3 <= 40{print $1}' aa.txt

    打印第5-10行的行号和用户名

    #awk -F: 'NR >= 5 && NR <= 10{print NR,"---",$1}' aa.txt 

    打印奇数行

    #awk -F: 'NR%2==1{print NR,"---",$0}' aa.txt  或  #awk -F: 'NR%2{print NR,"---",$0}' aa.txt

    打印偶数行

    #awk -F: 'NR%2==0{print NR,"---",$0}' aa.txt

    打印字段数大于5的行

    #awk -F: 'NF>5{print $0}' aa.txt

    打印UID不等于GID的用户名

    #awk -F: '$3!=$4{print $1}' aa.txt

    打印没有指定shell的用户

    #awk -F '/nologin$/{print $1}' aa.txt

  • 相关阅读:
    Goldbach's Conjecture
    查找素数
    最大公约数和最小公倍数
    迭代求立方根
    计算两个矩阵的乘积
    随机选择算法
    有几个PAT
    python3学习笔记之安装
    Ubuntu 16.04卸载一些不必要的预装软件
    Xshell连接不上虚拟机提示ssh服务器拒绝了密码,请再试一次
  • 原文地址:https://www.cnblogs.com/Michael--chen/p/6606311.html
Copyright © 2020-2023  润新知