2019-07-25

Awk 命令

环境配置 :

cat > reg.txt << e
> cat reg.txt
> Zhang  Dandan    41117397    :250:100:175
> Zhang  Xiaoyu    390320151   :155:90:201
> Meng   Feixue    80042789    :250:60:50
> Wu     Waiwai    70271111    :250:80:75
> Liu    Bingbing  41117483    :250:100:175
> Wang   Xiaoai    3515064655  :50:95:135
> Zi     Gege      1986787350  :250:168:200
> Li     Youjiu    918391635   :175:75:300
> Lao    Nanhai    918391635   :250:100:175
> e

语法结构 :

awk [参数] '模式{动作}' 文件信息
sed [参数] '条件 指令'  文件信息

Awk 命令适用范围 :

  1. 处理文件信息 :

    1. 文本文件信息 :
    2. 日志文件信息 :
    3. 配置文件信息 :
  2. 处理文件方式 :

    1. 排除信息 :
    2. 查询信息 :
    3. 统计信息 :
    4. 替换信息 :
    5. 对文件列进行处理 :

Awk 命令实际操作 :

查找信息 :

awk '$2~/Xiaoyu/{print $1,$3}' reg.txt 
查看文件第二列含有Xiaoyu字符的第一和第三列信息

处理分割符 : (-F)

awk -F"[: ]+"'$1~/Zhang/{print $1$2,$5}' reg.txt
查找第一列有 Zhang 字符串且以冒号和空格分割后的第125列信息显示

列对其 :

column -t   将文件内容列对齐

显示所有ID号码最后一位数字是1或5的人名 :

awk '$3~/[15]$/{print $1$2}' reg.txt|column -t
awk '$3~/1$|5$/{print $1$2}' reg.txt|column -t

awk 取反操作 :

awk '$1!~/^O/{print $3,$4}' reg.txt 
/#|^$/  取含有#和空行的内容
$0表示显示所有列信息

awk 替换操作 :

awk '$2~/Xiaoyu/{print $4}' reg.txt|sed 's#:#$#g'
awk '$2~/Xiaoyu/{print $4}' reg.txt|tr ":" "$"
awk -F"[: ]+"'$2~/Xiaoyu/{print "$"$4"$"$5"$"$6}' reg.txt
awk '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $NF}' reg.txt
gsub(/:/,"$",$NF);print $NF  多个命令用;来连接同时执行
gsub(/要替换的内容/,"替换成什么内容",$参数,表示替换第几列)
$NF  表示文件最后一列  

awk命令模式分类 :

普通模式 :

比较行信息 :

awk 'NR>2' reg.txt
显示第二行以后的信息 NR 表示文件行信息

连续多行信息 :

awk 'NR==2,NR==4' reg.txt
2到4行内容  , 连续

不连续多行 :

awk 'NR==2;NR==4' reg.txt
第二第四行内容  ;  不连续多行

特殊模式 :

BEGIN{动作} : 在处理文件之前,先做什么事.

添加表头 :

awk 'BEGIN{print "姓","名","号码","捐款记录"}{print $0}' reg.txt|column -t
在文件开头 添加表头

用于计算 :

awk 'BEGIN{print 4+5}'
计算 4+5 的值 可进行的计算符号有 + - * / %  ^(幂)==**  

修改内置变量 :

awk '{print $(NF-1)}' reg.txt   
取出倒数第二列
NR 表示行信息 : 
FS 指定分割符 
awk 'BEGIN{FS="[: ]+"}{print $4}' reg.txt
操作文件前先用 : 和空格分割 查看文件第4列信息
-v : 指定变量信息 
awk -vFS="[: ]+"  '{print $1,$4}' reg.txt
-v 指定 分割符FS="[: ]+"

END{动作} : 在处理文件之后,再做什么事情 ;

awk  'BEGIN{print "姓","名","号码","捐款记录"}{print $0}END{print "学生捐款登记表"}' reg.txt|column -t
咋文件末尾添加注释(内容)或将统计后的最终结果输出 如下 : 

awk 统计分析 :

  1. awk统计运算公式

    1. 文本信息累加运算

      i=i+1

      统计文件行数

      awk '{i++}END{print i}' test.txt

    2. 数值信息求和运算 :

      sum=sum+nn表示要对文件第n行进行求和运算 :

      seq 10|awk '{sum=sum+$1}END{print sum}'
      
      sep 10 创建环境  
      END输出最后结果
      $1表示计算第一列的和
      

扩展

windows 系统和linux系统文件相互传输

  • yum安装 lrzsz : yum install -y lrzsz
  • rz 将windows数据传输到linux系统
  • sz 将linux数据传输到windows系统
计算 secure-20161219 文件用户登录失败的次数
awk '/Failed/{i++}END{print i}' secure-20161219

列的分割过程 :

QQ图片20190725101621.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 操作系统命令三剑客-awk 一: 三剑客命令awk概述gawk : pattern scanning and pr...
    ManBu_x阅读 317评论 0 1
  • 转载 原文的排版和内容都更加友好,并且详细,我只是在这里贴出了一部分留作自己以后参考和学习,如希望更详细了解AWK...
    XKirk阅读 3,282评论 2 25
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,421评论 0 2
  • 骂人,是不登大雅之堂的粗鄙行为。却又是每一种语言被活学活用得最多的部分。 骂人也分段位之高低。低段位的骂人,尽是些...
    谜样男人阅读 856评论 0 2